- 论坛徽章:
- 0
|
AIX 4.1系统。程序是单线程的,大致如下
int global_int = 0; /*如果是全局变量,应该定义在所有函数外边,这里未能体现出是个全局变量*/
for (int i = 0; ; i++) /*死循环,暂时不知道退出条件。疑惑中。可能导致global_int越界超过int类型在该系统的最大值*/
{
printf("addr = %p, value = %d\n", &global_int, global_int);
global_int++; /*基本不可能出现int_arr[0]的赋值,在死循环中有可能出现global_int超过int的最大值从而越界,产生不确定行为。最终可能导致global_int地址突然加1,导致global_int的值很大。*/
int_arr[global_int] = global_int;
/* other codes */
}
每次都是循环到同一个次数时, global_int地址突然加1,导致global_int的值很大,从而int_arr[global_int]发生内存越界
总的来说我认为不是编译器的问题,应该是编码不严谨而导致越界问题。硬把global_int的值从int可能扩展成为long(个人猜测)所以地址会变。
我是C语言的初学者,不对请指正。
[ 本帖最后由 on-fire 于 2010-1-26 10:44 编辑 ] |
|