free使用中的常见错误
#include<stdio.h>#include <stdlib.h>#include <string.h>
void main(){
int *a=(char *)malloc(sizeof(20));strcpy(stu.name,"li ming");free(a);}在gcc中运行未出错,但是出现了内存越界严重漏洞。在使用gdb调试后我发现,a+4前面的内容释放了,a+4 开始的内容是"ing",因此gcc只释放了动态分配的空间,所以,运行程序未报错。在vc中运行出错,原因是vc去释放了最少8个地址的内存,但是后面的4个不是动态分配的,而是编译器分配的,所有无法释放。
为空指针赋值错;vc:Debug Assertion Failed gcc:Aborted (core dumped);
#include<stdio.h>#include <stdlib.h>void main(){int *p;free(p);}
gcc:seg-fault,vcc崩溃。#include<stdio.h> int main(void) { char *p = "Reage"; *ptr = 'R'; printf("\n [%s] \n", ptr); return 0; }