linux malloc指针释放问题
C语言malloc出来的指针使用不当,很容易造成未知的段错误问题。
该文章只分析在指针释放过程中造成段错误的场景,大家可以根据段错误时的错误提示,推测错误原因。
1、double free导致的段错误
错误提示:
*** glibc detected *** ./a.out: double free or corruption (fasttop): 0x0000000000d8b010 ***
C代码示例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p = malloc(100);
free(p);
free(p);
return 0;
}
2、释放野指针(该指针指向的地址,可能不是malloc分配时返回的地址)
错误提示:
*** glibc detected *** ./a.out: free(): invalid pointer: 0x0000000000986011 ***
C代码示例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p = malloc(100);
free(p + 1);
return 0;
}
浙公网安备 33010602011771号