C++ 如何解决C6386警告?
我正在编写一个从.txt文件读取系统化数据的简单代码,并收到警告“C6386:写入“点”时缓冲区溢出:可写大小为'num*8'字节,但可能会写入'16'字节”。在我的情况下如何解决?代码见附件C++ 如何解决C6386警告?,c++,visual-studio,warnings,C++,Visual Studio,Warnings,我正在编写一个从.txt文件读取系统化数据的简单代码,并收到警告“C6386:写入“点”时缓冲区溢出:可写大小为'num*8'字节,但可能会写入'16'字节”。在我的情况下如何解决?代码见附件 结构点{ int x,y; }; void main() { 流文件; 点*点; int num, i=0; 打开(“C:\\Users\\Den\\Desktop\\file.txt”,fstream::in); 如果(!file.is_open()){ cout>num; 点=新点[num]; } w
结构点{
int x,y;
};
void main()
{
流文件;
点*点;
int num,
i=0;
打开(“C:\\Users\\Den\\Desktop\\file.txt”,fstream::in);
如果(!file.is_open()){
cout>num;
点=新点[num];
}
while(文件>>num){
点[i].x=num;//>num;
点[i].y=num;
i++;
}
file.close();
}
这只是一个警告,但它给出了很好的建议。文件中包含的项目多于num
项是什么?警告告诉您,应该确保写入操作不会超过数组的结尾。具体而言:
此警告表示指定缓冲区的可写范围可能小于用于写入缓冲区的索引。这可能导致缓冲区溢出
此代码不会产生警告(VS2019):
intx,y;
而(i>x>>y)){
点[i].x=x;
点[i].y=y;
i++;
}
还有更多的错误检查要添加。如果
文件>>num代码>失败?如果num
为负怎么办?如果points=新点[num]代码>失败(返回nullptr
)?什么是i
?什么是num
(第一个值)?我指的是输入文件的值。txt;)您如何确定文件中的num
条目不超过第一次读取的条目数?现在是编辑问题的好时机,添加一个触发错误的小样本输入,这样我们就可以看到发生了什么。我-只是一个迭代器,num-integeruser4581301,没有错误,只是visual studio中的警告消息。程序工作得很好,正如我所希望的,但我只是想知道为什么会有这样的错误。正如我所说,数据是系统化和生成的,所以我不需要太多的检查,但是将来我会考虑阅读会失败,所以再次感谢。
int x, y;
while (i < num && (file >> x >> y)) {
points[i].x = x;
points[i].y = y;
i++;
}