注释掉scanf循环后,分段错误错误消失。为什么这个循环给我一个分段错误?
char** nameArray = malloc(numNames * sizeof(char *));
for(i =0; i< 10; i++) {
nameArray[i] = malloc(25 * sizeof(char));
}
for (i = 0; i< numNames; i++) {
scanf("%s", &nameArray[i]);
}
for (i =0; i<numNames; i++) {
free(nameArray[i]);
}
答案 0 :(得分:2)
首先你需要改变
for(i =0; i< 10; i++) {
到
for(i =0; i< numNames; i++) {
因为你需要创建足够的条目。
您还需要更改此行
scanf("%s", &nameArray[i]);
到
scanf("%s", nameArray[i]);
因为nameArray[i]
是一个需要的字符指针。
使用
也会更好scanf("%24s", nameArray[i]);
因为这会阻止缓冲区溢出。另外,检查scant
的返回值也是个好主意答案 1 :(得分:2)
这是因为nameArray[i]
已经是从malloc
获得的指针,所以你只需要将指针传递给scanf
,使用
scanf("%s", nameArray[i]);
没有&
。
答案 2 :(得分:1)
你必须照顾分配; 在您的情况下,您只分配10个名字元素
你必须为你要扫描的所有变量进行分配: 用numNames改变10
category/edit/1
和&amp;符号与指针中的normale charls一起使用,不要使用它;
for(i =0; i< numNames; i++) {
nameArray[i] = malloc(25 * sizeof(char));
}