1. 关于内存的问题:
void GetMemory(char *p, int num)
{
p = (char*)malloc(sizeof(char)*num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str,100); str仍然为NULL
strcpy(str,"hello"); 运行时出错
cout<<str<<endl;
}
请问运行Test函数的结果如何?
毛病出在GetMemory中。编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p, 编译器使_p=p。如果函数体内的程序修改了_p指向的内容,就导致参数p指向的内容做了相应的修改(因为它们指向同一块内存空间)。这就是指针可以用做输出参数的原因。但是在本题中,_p申请了新的内存,只是把_p本身的值改变了,即指向了新的内存空间,但是p本身丝毫未变。所以函数GetMemory并不能输出任何东西。事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。