在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));

而且,在完成缓冲区操作后,不要忘记每次对freecalloc的调用都调用malloc

以上是关于在C中设置2D字符数组时出现SegFault的主要内容,如果未能解决你的问题,请参考以下文章

将 char 2d 数组转换为 2d char 数组列表时出现问题

在代码中设置自动布局约束时出现奇怪的问题

在 smack 中设置 vcard 中的名字时出现 NullPointerException

尝试在 lambda 函数中设置按钮标签时出现分段错误

在 Java 对象的 Kotlin 中设置属性时出现奇怪的“无法重新分配 Val”错误

在 Java 对象的 Kotlin 中设置属性时出现奇怪的“无法重新分配 Val”错误