参考:就删了个printf,代码崩了!
1、运行报错代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"void func1()
{int arr[10];memset(arr, 1, sizeof(arr));
}void func2()
{int index;int* arr = (int*) malloc(5);arr[index] = 55;
}int main()
{func1();func2();return 0;
}
2、添加打印日志,段错误消失
#include "stdio.h"
#include "stdlib.h"
#include "string.h"void func1()
{int arr[10];memset(arr, 1, sizeof(arr));
}void func2()
{int index;int* arr = (int*) malloc(5);arr[index] = 55;
}void printLog()
{printf("Hello world\n");
}int main()
{func1();printLog();func2();return 0;
}
3、原因:
未添加打印日志时,index的值是func1中残留的值
4、扩展问题:
1)printf中没加'\n'时,必定崩溃,func2函数中index一定是0x01010101;
2)在func1函数中加printf("Hello world\n");必定崩溃,func2函数中index一定是0x01010101;
3)当func1函数中arr数组大小是10时,index才必定是0x01010101;当为其他值时,index也是随机值;
4)index是0x01010101必定崩溃,是其他随机值时,怎么不崩溃?