*** glibc detected *** malloc(): memory corruption: 0x09eab988 ***
发现是由于memset越界写引起的。
在Linux Server上不好模拟出来:不过若是先malloc,再越界memset,再free此内存块,然后malloc新内存块就会出现类似错误。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p1 = (char*)malloc(210);
if(p1 != NULL)
{
printf("malloc(210) succeeded\n");
}
if(p1 == memset(p1,0,300))
{
printf("memset(p1,0,300) succeeded\n");
}
free(p1);
printf("Now char *p2 = (char*)malloc(210)\n");
char *p2 = (char*)malloc(210);
if(p2 != NULL)
{
printf("memset(p2,0,210) succeeded\n");
}
else
{
printf("memset(p2,0,210) failed\n");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
会出现:
malloc(210) succeeded
memset(p1,0,300) succeeded
*** glibc detected *** double free or corruption (out): 0x09f0e008 ***
Abort
找了一篇类似文章:http://blog.csdn.net/tommy_lgj/archive/2008/08/18/2790452.aspx