【发布时间】:2018-09-29 14:54:39
【问题描述】:
我不确定为什么在尝试编译这个小 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 文件/程序没有任何问题;这只是一个文件。从我初学者的角度来看,这似乎是操作系统的一个错误。
编辑:这个程序是我在here找到的 K&R 练习中稍作修改的示例
【问题讨论】:
-
我想你想要
++arr[c-MIN],一方面。 -
“我觉得这是操作系统的错误。”不,它几乎总是你的程序中的一个错误。
-
我没有编写程序 - it's an example someone else wrote 用于 K&R 书籍练习。在升级到 macOS 10.14 之前,它编译并运行得很好。
-
我觉得这是操作系统的一个错误 非常非常非常糟糕的印象。像这样的简单程序几乎永远不会发现操作系统错误,尤其是在一个已经存在了很长时间的操作系统中,即使不是数十亿,也有数亿用户。
-
您看到的是“未定义的行为”。请参阅stackoverflow.com/questions/7961067/… 了解有关该问题的一个问题。
标签: c segmentation-fault