代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str = NULL;
getalloc(str);
printf("%s\n",str);
free(str);
str = NULL;
return 0;
}
void getalloc(char *p)
{
p = (char*)malloc(100);
strcpy(p,"hello world");
}
代码分析如下:假设malloc返回的堆区首地址为0x1000
主函数中语句getalloc(str);将NULL传给子函数中参数p,是值传递。所以改变p的内容并不会影响主函数中str的内容,从而导致段错误。
内存图: