gpt4 book ai didi

c++ - 使用指针的二维数组的非访问冲突

转载 作者:行者123 更新时间:2023-11-30 04:10:37 25 4
gpt4 key购买 nike

我正在尝试使用指针创建二维动态数组:

int** Grid;
Grid = new int*[5];
for (int i=0;i<5;i++) { Grid[i] = new int[5]; }
std::cout << Grid[4][300] << std::endl; // output: -17891602
std::cout << Grid[5][0] << std::endl; // access violation

我需要特定大小的数组,这就是我不使用静态数组的原因。如您所见,虽然我正在制作一个 5x5 数组,但调试器在尝试读取 Grid[4][300] 时没有给出错误。谁能告诉我为什么会这样?

这似乎只适用于二维。 (尝试读取 Grid[5][0] 会出现访问冲突错误)如果我错了,请纠正我,但从技术上讲,我实际上是在创建一个指针数组?

我希望 Grid[5][0] 出现异常。我真正不明白的是为什么 Grid[4][300] 没有错误。有人可以告诉我如何使用 5x5 尺寸的动态数组吗?

最佳答案

您从未初始化 Grid[5],在您的 for 循环中您检查了 i < 5 .
如果 i 小于 5,那么它永远不会在你的 for 循环中用作 5。

请记住,数组将 0 算作一个位置。

这意味着int arr[5]只能使用 0-4 进行索引,多于或少于 4 都会导致访问冲突


为什么[300]的原因没有抛出访问冲突是因为您索引的是指针,而不是定义的数组。


此外,不要忘记初始化数组中的值(很可能为 0)。您可能不想要像 -1994021 这样的意外数字出现在你的数据中。
memset很擅长做这件事。

关于c++ - 使用指针的二维数组的非访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20580008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com