分段错误:macOS 10.14 Mojave 上的小型 C 程序为 11



我不确定为什么在尝试编译这个小 C 文件时会Segmentation Fault: 11

#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;
}

我正在使用Apple的内置cc,它只是Clang/Apple LLVM 10.0.0

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

编辑:这个程序是我在这里找到的K&R练习的稍微修改的例子

用这行

int arr[MAX - MIN];

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

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

然后,有了这个声明(以及下一个(:

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

。您正在写入arr[97]到不存在的arr[122]的数组单元格中,从而覆盖程序堆栈的其他部分。这就是您遇到分段错误的原因。

相关内容

  • 没有找到相关文章

最新更新