c++ - 从 C++ 中的 int ** 数组访问元素

标签 c++ arrays

我正在用 C++ 创建一个二维数组,需要将该数组作为参数传递给函数。在我的函数中,我需要从数组中访问一个元素,以便将其保存为一个值,即:

int lowestPoint(int **arr, int x, int y, int n) {

    minVal = *(*(arr+x)+y); // here is where I'm getting the exception
    return minVal;

}

我试过将 minVal 设置为 arr[X][Y]并尝试将数组作为其他变体传递,而不仅仅是 **arr 但似乎没有任何效果。

数组在我的主函数中初始化为 int arr[x][y]我通过将其转换为 otherFunc(reinterpret_cast<int **>((*arr)[n]), n) 将其传递给另一个函数,然后从该函数调用 int val = lowestPoint(arr,i,j,n) 将其发送到 lowestPoint .我认为这些调用可能有问题,但我不确定如何修复它——我真的没有使用 C++ 中的二维数组的经验,而且它在 Java 中简单得多。我一直收到数组的 EXC_BAD_ACCESS 错误,所以如果有人知道如何解决这个问题,我将不胜感激。谢谢!

编辑: “n”是数组的大小;例如,如果它是一个 3x3 数组,n = 3。我只是将数组初始化为 int arr[n][n]然后存储元素。我知道实际的数组本身代表正确的值,一旦我将它发送到另一个函数,它就无法访问它。

最佳答案

当您使用 reinterpret_cast((*arr)[n]) 将数组传递给第一个函数时,不是将指针传递给实际数组,而是传递位置 [0][n] 中的值(通过使用(*arr)[n]) 并将 it 转换为 **arr。所以本质上你得到一个新数组,它指向内存中的一个随机位置,该位置等于该数组槽的内容。

我不确定你打算做什么,但如果你想传递实际的数组,只需传递 arr。如果您计划传递一个子数组,则此方法完全不正确,因为您在数组内传递一个偏移量,您将得到倾斜的数据。

希望这有帮助, 里尔

关于c++ - 从 C++ 中的 int ** 数组访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58386918/

相关文章:

c++ - gnuplot 命令不适用于 C++ 中的 system() 函数

c++ - 在哪里/如何将函数放在头文件与 C++ 源文件中

javascript - 以base64解码字符串并加载为数组JS

c malloc 结构数组

javascript - 如何检查一个键值对(在一个数组中)是否存在于另一个数组中?

c - 初始化 C 动态数组

c++ - 两个std::unordered_map的交集

c++ - 当我尝试调用 main 时,它工作了几次,但后来我遇到了 Segmentation fault

c++ - 如何将 Vulkan-hpp 包含在 glfw 中?

JavaScript 获取有单词的天数,比当前日期提前 5 天