在使用动态内存分配程序中,常常会产生不易发现的错误,这其中就包括对NULL指针进行解引用,访问未知内存区域(越界访问&访问未初始化指针指向区域),内存泄漏,释放非动态内存开辟空间(向free函数传递一个并非由malloc函数返回的指针),释放动态内存开辟的部分空间,空间释放后利用指针被继续使用,不检查空间分配结果。
问题一:访问未知内存区域
问题二:对NULL指针进行解引用访问
问题三:内存泄漏
问题四:内存分配检查
问题一:访问未知内存区域
例1:以下代码有什么问题,运行会有何结果(题目来自《C语言深度解剖》)
struct student
{
char *name;
int score;
}*pstu;
int main()
{
pstu = (struct student *)malloc(sizeof(struct student));
strcpy(pstu->name, “Jimy”);
pstu->score = 99;
free(pstu);
return 0;
}
答案:运行错误:
error7.exe 中的 0x5b33f689 (msvcr90d.dll) 处未处理的异常: 0xC0000005: 写入位置 0xcdcdcdcd 时发生访问冲突。
在定义结构体变量 stu 时ÿ