数组绑定冲突:不同索引处的段错误



为什么这个程序每次都对不同的 i 值进行段错误?

#include <stdio.h>
int main() {
int a[16], i = 0; 
while(1) {  
a[i] = i;
printf("%dn", a[i]);
i++;
}
}

我认为这与C分配内存的方式有关。当您使用该行时

int a[16]

你本质上说的是"在内存中为我分配足够的空间来容纳十六个整数,从一个给定的点开始(称这个点为x("。

然后当你说

while(1) {  
a[i] = i;
printf("%dn", a[i]);
i++;
}

你说,永远,设置aith索引i并打印出来。这是通过从x开始,然后继续移动,一次一个索引。对于前 16 个整数,这很好,因为您已经清除了空间来执行此操作。

但是,当您通过它时,您还没有清除空间,因此您不知道那里有什么以及可以覆盖或打印的内容。这可能在一段时间内没问题,但随后您将到达无法覆盖内存中的内容(它不是免费的(的地步。在这一点上,你得到了你的segfault.

由于每次运行程序时,您都会在不同的位置分配空间,因此需要不同次数的迭代才能到达占用内存的点,因此您将在不同的索引处segfault

相关内容

  • 没有找到相关文章

最新更新