为什么我从scanf循环中得到分段错误?

时间:2016-10-30 08:27:44

标签: c arrays pointers segmentation-fault

注释掉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]);
}

3 个答案:

答案 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));
}