我不知道为什么要在编译这个小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;
}我使用的是苹果内置的cc,它只是Clang/AppleLVM10.0.0
这个文件在macOS 10.13.6上编译得很好,我在10.14上编译任何其他C文件/程序没有任何问题;它只是一个文件。从我初学者的角度来看,这似乎是操作系统的一个bug。
编辑:这个程序是我发现这里的K&R练习中的一个稍微修改过的例子。
发布于 2018-09-29 15:12:06
用这条线
int arr[MAX - MIN];..。您正在创建一个25 (122-97)整数数组。有效的数组索引是0. 24。
首先,由于每个数组单元格专用于小写字母,因此数组应该有26个单元格。
然后,使用以下语句(以及接下来的语句):
for (i = MIN; i <= MAX; i++) arr[i] = 0;..。您正在将数组单元格( arr[97] )写入不存在的数组单元格( arr[122] ),覆盖程序堆栈的其他部分。所以你才会有分割错误。
https://stackoverflow.com/questions/52569550
复制相似问题