[英]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*))
:当您立即将所有指针全部替换为“其他”时,将所有指针设置为零确实没有意义malloc
调用将返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.