首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言:分段故障11

C语言:分段故障11
EN

Stack Overflow用户
提问于 2016-08-14 05:41:10
回答 1查看 63关注 0票数 0

最近我一直在从K&R的书中学习C语言,然后我遇到了一个错误。据我所知,分段故障与内存有关,但书中没有对此进行解释。如果你可以看看我的代码,解释一下什么是分段错误,以及这个错误是如何在我的代码中出现的。谢谢。

代码语言:javascript
复制
#include <stdio.h>

#define MAXLINE 256

int main () {
  int c, ndigit[10], i, d, e;
  char str[MAXLINE];
  while ((c = getchar()) != EOF) {
      if (c >= '0' && c <= '9')
          ++ndigit[c - '0'];}
  for (i = 0; i <= 9; i++) {
      for (d = 0; d < ndigit[i]; d++)
          str[d] = '*';
    str[d] = '\0';
    printf("%d: %s\n",i,str);
    for (e = 0; e <= MAXLINE; e++)
      str[e] = '\0';
  }
  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 05:48:06

您没有将ndigit初始化为零,它是一个垃圾值的数组,然后递增。这可能是因为ndigit的值非常大,导致您使用非常大的索引访问str,使str数组的边界溢出到无效的内存区。操作系统发现您试图访问无效的内存区,就会发出segmentation fault,杀死您的程序。

此外,正如Jean-Fran指出的那样,您的for-loop应该转到< MAXLINE,因为str的最后一个有效索引是MAXLINE - 1

正如mszymborski指出的那样,您可能需要在打印语句的末尾换行('\n')。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38937251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档