![](/img/trans.png)
[英]Segmentation fault when using malloc to create array of pointers to pointers
[英]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
指向的某个内存地址。 正如某些人已经提到的,您的问题有两个方面
chr
未初始化,因此给您未定义的行为,因为该变量具有不确定的值。 有关此原因的信息,请参见此答案 。 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.