在 C 中设置二维字符数组时出现 SegFault
SegFault when setting up 2D character array in C
我正在尝试设置一个 10x10 的网格,其中填充了“$”字符,然后将其打印出来。
char **plot;
plot = (char**)calloc(100, sizeof(char));
int i,j;
for (i=0; i< 10; i++) {
for(j=0; j<10; j++){
plot[i][j] = '$';
}
}
for (i=0; i<10; i++) {
for(j=0; j<10; j++) {
printf("%c", plot[i][j]);
}
}
free(plot);
到目前为止,这是我的代码,当我 运行 这是一个分段错误时。
您只分配了一个指针列表(而且是错误的)!该行:
plot = calloc(10, sizeof(char*)); // Note the extra * in sizeof(char*)
创建一个包含 10 个指针的一维数组(列表)。然后您需要做的是为这些指针中的每一个分配一个 10 个字符的缓冲区:
for (i = 0; i < 10; ++i)
plot[i] = malloc(10 * sizeof(char)); // Here use "sizeof(char)" but it's always "1"
并且,当您完成缓冲区后,不要忘记为每个对 calloc
和 malloc
的调用调用 free
!
此外,你不需要调用 calloc
- 你可以只使用 malloc(10 * sizeof(char*))
:当你立即去时,将所有指针设置为零真的没有意义将它们全部替换为 'other' malloc
调用将 return.
我正在尝试设置一个 10x10 的网格,其中填充了“$”字符,然后将其打印出来。
char **plot;
plot = (char**)calloc(100, sizeof(char));
int i,j;
for (i=0; i< 10; i++) {
for(j=0; j<10; j++){
plot[i][j] = '$';
}
}
for (i=0; i<10; i++) {
for(j=0; j<10; j++) {
printf("%c", plot[i][j]);
}
}
free(plot);
到目前为止,这是我的代码,当我 运行 这是一个分段错误时。
您只分配了一个指针列表(而且是错误的)!该行:
plot = calloc(10, sizeof(char*)); // Note the extra * in sizeof(char*)
创建一个包含 10 个指针的一维数组(列表)。然后您需要做的是为这些指针中的每一个分配一个 10 个字符的缓冲区:
for (i = 0; i < 10; ++i)
plot[i] = malloc(10 * sizeof(char)); // Here use "sizeof(char)" but it's always "1"
并且,当您完成缓冲区后,不要忘记为每个对 calloc
和 malloc
的调用调用 free
!
此外,你不需要调用 calloc
- 你可以只使用 malloc(10 * sizeof(char*))
:当你立即去时,将所有指针设置为零真的没有意义将它们全部替换为 'other' malloc
调用将 return.