首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >macOS 10.14 Mojave上小C程序的分段故障: 11例

macOS 10.14 Mojave上小C程序的分段故障: 11例
EN

Stack Overflow用户
提问于 2018-09-29 14:54:39
回答 1查看 424关注 0票数 1

我不知道为什么要在编译这个小C文件时获得Segmentation Fault: 11

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

#define MIN  97
#define MAX  122
#define DIFF 32

int main()
{
  int c = EOF;
  int i, j;
  int arr[MAX - MIN];

  for(i=MIN; i<=MAX; i++)
    arr[i] = 0;

  while((c = getchar()) != EOF) {
    if(c >= MIN)
      ++arr[c];
    else
      ++arr[c + DIFF];
  }

  for(i=MIN; i<=MAX; i++) {
    printf("|%c|", i);
    for(j=1; j<=arr[i]; j++)
      putchar('-');
    putchar('\n');
  }
  return 0;
}

我使用的是苹果内置的cc,它只是Clang/AppleLVM10.0.0

这个文件在macOS 10.13.6上编译得很好,我在10.14上编译任何其他C文件/程序没有任何问题;它只是一个文件。从我初学者的角度来看,这似乎是操作系统的一个bug。

编辑:这个程序是我发现这里的K&R练习中的一个稍微修改过的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-29 15:12:06

用这条线

代码语言:javascript
复制
int arr[MAX - MIN];

..。您正在创建一个25 (122-97)整数数组。有效的数组索引是0. 24。

首先,由于每个数组单元格专用于小写字母,因此数组应该有26个单元格。

然后,使用以下语句(以及接下来的语句):

代码语言:javascript
复制
for (i = MIN; i <= MAX; i++) arr[i] = 0;

..。您正在将数组单元格( arr[97] )写入不存在的数组单元格( arr[122] ),覆盖程序堆栈的其他部分。所以你才会有分割错误。

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

https://stackoverflow.com/questions/52569550

复制
相关文章

相似问题

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