getmemory的问题2!?!?!??

来源:百度知道 编辑:UC知道 时间:2024/05/31 20:24:49
.#include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险

为什么!??!?!?!

p属于值传递,在getmemory()中分配的内存没有传递到str中,
void getmemory(char *p) //改为 (char **p)
{
p=(char *) malloc(100); //*p=(char *)malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str); //getmemory(&str);
printf("%s/n",str);
free(str);
return 0;
}

void getmemory(char **p)
{
*p=(char *)malloc(100);
strcpy(*p,"hello world");
}
就可以了,这里的指针的地址的值是直接的值,不是间接的,是值传递。