c - 为什么我从 scanf 循环中收到段错误?

标签 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]);
}

最佳答案

首先你需要改变

for(i =0; i< 10; i++) { 

for(i =0; i< numNames; i++) { 

因为您需要创建足够的条目。

您还需要更改此行

scanf("%s", &nameArray[i]);

scanf("%s", nameArray[i]);

as nameArray[i] 是一个需要的字符指针。

而且使用起来会更好

scanf("%24s", nameArray[i]);

因为这可以防止缓冲区溢出。检查 scant 的返回值也是一个好主意

关于c - 为什么我从 scanf 循环中收到段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327254/

相关文章:

c - C 中的 strtok 和传递参数

c++ - 如何获得忘记算术运算的警告?

java - 在二维阵列网格上绘制圆圈(JAVA)

c++ - 当数据可以在类对象超出范围之前被删除时,类允许访问其数据(通过 ptr/it)是不是糟糕的设计?

c - C 中完整的 "for"循环语法是什么?

c++ - 适用于 C/C++ 的类似 ReSharper/StyleCop 的 Visual Studio 插件

java - 计算学生的 GPA

arrays - 如何在 bool 数组中查找模式组?

c - C 中指向无效位置错误的指针

c++ - 普通数组与指针数组