这段代码不起作用,我不知道为什么,我使用了所有内容,正如我的教授告诉我们的,我认为它应该有效,为什么编译器会抛出Segmentation fault(core dumped)异常。我做错了什么?
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
的{{1}}数字,然后抛出异常。谢谢你的回答。
答案 0 :(得分:0)
正如你明显注意到的,问题出在这里:
char *chr;
scanf("%s", chr);
scanf
做的是将从控制台输入读取的字符串放入chr
指向的某个内存地址。正如一些人已经提到的,你的问题在这里是双重的
chr
未初始化,从而为您提供未定义的行为,因为该变量具有不确定的值。有关原因的信息,请参阅this answer。 chr
必须指向一些已分配的内存。这可以通过几种方式完成,1)使用char[]
或使用malloc
和朋友分配内存。 所以有两种方法可以解决这个问题:
#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*));
请参阅this answer,了解如何分配指针列表。