在C中分配2d堆数组的持续段错误

问题描述 投票:0回答:1

我正在创建这样的2D数组

int** B = calloc(16, sizeof(int*));

for(int i = 0; i <= 16; i++){

B[i] = calloc(16, sizeof(int));

}

然后,我将B传递给需要参数int **的函数。然后,此函数调用另一个需要int **的函数,因此B再次被传递。

我能够做到这一点B[1][1]++;

但是当我尝试

B[1][0] = 1; 

我遇到了细分错误。

我尝试了很多事情,没有任何事情消失了。

编辑:已解决!

最后是我使用&B而不是仅将B传递给函数B导致问题的方法,尽管我在解决此错误之前实现了下面建议的更改,所以可能我接下来会遇到此问题。

c multidimensional-array segmentation-fault
1个回答
1
投票

在for循环中,您的条件为i <= 16,并且仅分配了16 * int *的大小。因此,您超出了分配空间的范围。

© www.soinside.com 2019 - 2024. All rights reserved.