请问运行Test 函数会有什么样的结果?为什么?

来源:百度知道 编辑:UC知道 时间:2024/06/27 10:17:39
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, “hello world”);
printf(str);
}

内存没有得到分配
所以会内存出错

如果这种情况出现在java中就可以了

问题主要出现在函数上,在C中,包括在你的GetMemory函数中

你的参数是个指针(注意指针也是一种数据类型它也有一定的内存)在Test中你传给它的同样是个指针,这时就相当于一种值
传递,传递的是指针中的值,所以函数结束后str的值也就是
地址并没有改变,而你用的又是strcpy(它相当于把"hello world"
放入str所指向的内存(而str指向空,所以内存会出错))
当然如果你用str="hello world"就不会出错(这个表示把"hello world"的首地址赋给str。

当然如果这种情况出现在java中,java规定,如果没有引用指向

内存,就会回收这些内存,在java中"hello world"相当于一个匿名
对象,如果这时把一个引用指向它,它就不会被回收。

void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
if (str)
{
strcpy(str, “hello world”);
printf(str);
}
else
{
//......
}
}
这样就没问题了