当前位置:  开发笔记 > 编程语言 > 正文

在C中设置2D字符数组时出现SegFault

如何解决《在C中设置2D字符数组时出现SegFault》经验,为你挑选了1个好方法。

我正在尝试设置一个填充有'$'字符的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);

到目前为止,这是我的代码,当我运行此代码时,我遇到了分段错误。



1> Adrian - Rei..:

您仅分配了一个指针列表(并且分配不正确)!该行:

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"

而且,不要忘记调用free每个调用的callocmalloc当你与缓冲区完成!

另外,您不需要调用calloc-您可以使用malloc(10 * sizeof(char*)):在立即将所有指针替换为“其他” malloc调用将返回的所有指针时,将所有指针都设置为零真的没有意义。


或者,保留100个项目的calloc,然后使用char(* plot)[10] = calloc(100,sizeof(char));将其强制转换为char(*)[10]。然后,“ plot [i] [j]”将按预期工作并访问2D数组中的项。
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有