【发布时间】:2018-01-25 07:51:27
【问题描述】:
我是 C 的初学者,我正在尝试通过做一些简单的练习来更熟悉数组和手动内存分配的概念。我一直在阅读关于“中止陷阱:6”错误的所有(许多)问题,虽然我学到了很多东西,但它们并没有解决我的问题。
我查看的类似主题包括:
"Abort trap: 6" running C program on a Mac
...还有更多,都与我正在处理的内容略有不同。
问题似乎是我正在写入我无法访问的内存,但我认为通过在声明它时使数组足够大,我可以避免这个问题。显然我错了!
代码应该简单地创建一个包含 100 个 int 的数组(在位置 0 到 99),并为每个数组分配其位置的值(即数组中的第一项应该是 int 0,最后一个应该是 int 99)。当我运行这段代码时,我得到了所有的示例 printf 语句——其中包含正确的值——但是后面跟着一行“Abort trap: 6”。
有人可以看看我的代码并告诉我我做错了什么导致这个错误吗?
#include <stdio.h>
int main(void)
{
int obvs[101];
for (int i = 0; i < sizeof(obvs); i++)
{
obvs[i] = i;
}
printf("obvs[9] = %i\n", obvs[9]);
printf("obvs[13] = %i\n", obvs[13]);
printf("obvs[37] = %i\n", obvs[37]);
printf("obvs[74] = %i\n", obvs[74]);
printf("obvs[99] = %i\n", obvs[99]);
return 0;
}
【问题讨论】:
-
i < sizeof(obvs)-->i < sizeof(obvs)/sizeof(obvs[0])(也叫int obvs[101];-->int obvs[100];) -
Sizeof ovs 为 4*101 字节。
-
感谢两位cmets!我的初学者头脑需要一点时间来围绕它们,但后来我意识到问题是我认为我知道 int 的大小是多少,而我显然不知道。哈哈,菜鸟。 :) 再次感谢你们。
标签: c arrays macos memory-management abort