在C中设置2D字符数组时出现SegFault
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C中设置2D字符数组时出现SegFault相关的知识,希望对你有一定的参考价值。
我正在尝试建立一个填充有'$'字符的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));
而且,在完成缓冲区操作后,不要忘记每次对free
和calloc
的调用都调用malloc
!
以上是关于在C中设置2D字符数组时出现SegFault的主要内容,如果未能解决你的问题,请参考以下文章
将 char 2d 数组转换为 2d char 数组列表时出现问题
在 smack 中设置 vcard 中的名字时出现 NullPointerException