如何解决VS中的C6385警告关于动态数组
我的代码应该打印两组整数的并集和交集。 为什么会收到此警告?
是因为我使用了动态数组,并且它的大小在运行时可以是任何值?
我该如何解决?我的代码工作正常,但是此警告确实使我感到烦恼。
P.S:我知道使用std::vector
会容易得多,但是我的老师要求使用数组。
#include <iostream>
using namespace std;
void UnionFunc(int[],int,int[],int&);
void IntersectionFunc(int[],int&);
int main() {
int* A;
int SizeA;
int* B;
int SizeB;
int* Union;
int UnionSize=0;
int* Intersection;
int IntersectionSize=0;
cout << "Enter the Size of First Set : "; cin >> SizeA;
A = new int[SizeA];
cout << "Enter the Size of Second Set : "; cin >> SizeB;
B = new int[SizeB];
Intersection = new int[SizeA >= SizeB ? SizeB : SizeA];
Union = new int[SizeA + SizeB];
for (int i = 0; i < SizeA; i++) {
cout << "Set A[" << i + 1 << "] = ";
cin >> A[i];
}
for (int i = 0; i < SizeB; i++) {
cout << "Set B[" << i + 1 << "] = ";
cin >> B[i];
}
UnionFunc(A,SizeA,B,SizeB,Union,UnionSize);
IntersectionFunc(A,Intersection,IntersectionSize);
cout <<endl<< "Union Set : ";
for (int i = 0; i < UnionSize; i++) {
cout << Union[i] << ",";
}
cout <<endl <<"Intersection Set : ";
for (int i = 0; i < IntersectionSize; i++) {
cout << Intersection[i] << ",";
}
system("pause>n");
return 0;
}
void UnionFunc(int A[],int SizeA,int B[],int SizeB,int Union[],int &UnionSize) {
//Adding First Array to Union Array
for (int i = 0; i < SizeA;i++) {
Union[i] = A[i];
UnionSize++;
}
//Checking if second array's elemnts already exist in union arry,if not adding them
bool exist;
for (int i = 0; i < SizeB; i++) {
exist = false;
for (int j = 0; j < UnionSize; j++) {
if (B[i] == Union[j] ) {
exist = true;
}
}
if (exist == false) {
Union[UnionSize] = B[i];
UnionSize++;
}
}
}
void IntersectionFunc(int A[],int Intersection[],int& IntersectionSize) {
for (int i = 0; i < SizeA; i++) {
for (int j = 0; j < SizeB; j++) {
if (A[i] == B[j]) {
Intersection[IntersectionSize] = A[i];
IntersectionSize++;
}
}
}
}
解决方法
是因为我使用动态数组并且它的大小可以是 运行时?
是的!编译器不知道(并且,在编写代码时,不知道)SizeA
和SizeB
都是“有效”数字-因此大小您创建的三个int
数组中的一个可能小于Intersection[i]
'读取'有效的必需数组。
对此的“快速而肮脏的”修复是为编译器提供 visible 保证,即您创建的数组将至少具有一定的大小,如下所示:
A = new int[max(1,SizeA)]; // Compiler can now 'see' a minimum size
同样,对于您使用new[]
运算符进行的其他分配。
(我已经在VS2019上对此进行了测试,将max(1,SizeA)
和max(1,SizeB)
'fixes'添加到 just A
和{{ 1}}并删除警告。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。