C++ VS2019 缓存区溢出和读取数据无效的警告

人生不像做饭,不能等万事俱备了才下锅

今天在使用new创建动态数组时出现“缓存区溢出”“读取数据无效”的警告,警告如下:C++ VS2019 缓存区溢出和读取数据无效的警告_第1张图片
代码如下:

void test(int n)
{
    //int n = 5;
    int* nums = new int[n];
    nums[0] = 1;
    nums[1] = 2;
    //cout << nums[1] << endl;
}
int main()
{   
    test(5);
    return 0;
}

首先是缓存区溢出,直接运行VS会发出警告“警告C6386 写入到“nums”时缓冲区溢出: 可写大小为“n*4”个字节,但可能写入了“8”个字节。”,但是可以正常运行。当取消int n = 5;的注释,或者直接将n改为5时,警告消失。
然后是读取的数据无效的警告,当取消cout << nums[1] << endl;的注释,也就是输出数组头指针的下一个值时VS会发出警告“警告 C6385 从“nums”中读取的数据无效: 可读大小为“n*4”个字节,但可能读取了“8”个字节。”但是可以正常输出。

猜测可能是因为编译器在分配内存时无法确定n的值,所以分配的是n个字节的连续空间?但是也可以正常赋值和输入,求大佬解答

你可能感兴趣的:(c++,visual,studio)