free使用中的常见错误
2012-09-09 12:53
190 查看
#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;
}
#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;
}
相关文章推荐
- 常见动态内存分配malloc()/free()、new/delete使用方法及常见错误
- ArcGIS Server GP服务使用常见错误总结
- Oracle使用和开发过程中常见错误
- struts2.5框架使用通配符指定方法(常见错误)
- 使用“淘宝助理”的常见错误
- GitHub使用教程及常见错误解决
- windows 2008初体验常见问题: 无线网络"没有正确配置为使用IP协议" 错误解决办法
- 用javah 导出类的头文件, 常见的错误及正确的使用方法
- findViewById()使用常见错误
- struts2.5框架使用通配符指定方法常见错误
- (转)用javah 导出类的头文件, 常见的错误及正确的使用方法
- Android Fragment使用 嵌套Fragments (Nested Fragments) 的使用及常见错误
- Android开发常见错误(3):使用retrofit+rxjava更新UI出现卡顿
- 使用JavaScript常见错误集锦
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
- 使用 tensorflow 时的常见错误及解决方法
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
- 集成ZXing二维码第三方库的使用和常见错误问题解析和步骤
- 用javah 导出类的头文件的常见错误及正确的使用方法
- java使用json的时候常见的引包错误