我正在尝试动态创建一个 2D 数组(5 行和 2 列)。分配内存时没有任何问题。但是,在将实际值分配给数组时,我收到了分段错误错误。 在调试时,我意识到当 for 循环中的
i
的值为 4 时会弹出错误
即使毫无问题地分配了数组将使用的内存,怎么可能出现分段错误错误?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int **ptr = (int **)malloc(sizeof(int)*5);
for(int i = 0; i<5; i++){
ptr[i] = (int *)malloc(sizeof(int)*2);
}
for(int i = 0; i<5; i++){
for(int j = 0; j<2; j++){
ptr[i][j] = i;
}
}
return 0;
}
即使毫无问题地分配了数组将使用的内存,怎么可能出现分段错误错误?
代码未正确分配。
避免分配错误。
sizeof(int)*5
OP 代码中的尺寸错误。
所引用对象的大小,而不是类型。
不需要铸造。
更好的代码检查分配失败。
// int **ptr = (int **)malloc(sizeof(int)*5);
int **ptr = malloc(sizeof ptr[0] * 5);
if (ptr == NULL) Handle_OutOfMemory();