繁体   English   中英

将malloc与双指针一起使用时出现分段错误

[英]Segmentation fault when using malloc with double pointers

这段代码不起作用,我也不知道为什么,我完全按照教授告诉我们的方式使用了所有东西,我认为它应该起作用,为什么编译器会抛出Segmentation Fault(核心转储)异常。 我究竟做错了什么?

int main() {
    int n;
    char *chr;
    char pchr;
    scanf("%s", chr);
    scanf(" %d", &n);

    char **table = (char **) malloc(n * sizeof(char*));
    char *chr2 = chr;
}

这只是程序的一部分,但是当我仅运行此代码时,编译器将引发异常。 它甚至不扫描n号,它仅扫描char并引发异常。 谢谢你的回答。

正如您明显注意到的那样,问题出在这里:

char *chr;
scanf("%s", chr);

scanf作用是将从控制台输入中读取的字符串放入chr指向的某个内存地址。 正如某些人已经提到的,您的问题有两个方面

  1. chr未初始化,因此给您未定义的行为,因为该变量具有不确定的值。 有关原因的信息,请参见此答案
  2. chr必须指向一些已分配的内存。 这可以通过两种方式完成:1)通过使用char[]或使用malloc和friends分配内存。

因此,有两种解决方法:

#define BUFFERSIZE 50
char chr[BUFFERSIZE] = {'\0'};
scanf("%s", chr);

要么

char* chr = calloc(BUFFERSIZE, sizeof(char));
scanf("%s", chr);
free(chr);
chr = NULL;

接下来,此行不执行您认为的操作:

char **table = (char **) malloc(n * sizeof(char*));

请查看此答案以了解如何分配指针列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM