Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解决C6386警告?_C++_Visual Studio_Warnings - Fatal编程技术网

C++ 如何解决C6386警告?

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

我正在编写一个从.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];
}
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++;
}