一、未能给指针成功赋值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void GetMemory(char* p)
{
p = (char*)malloc(20 * sizeof(char));
}
void Test()
{
char* str = NULL;
GetMemory(str);
strcpy(str, "Hello World!");
printf("%s\n", str);
}
int main()
{
Test();
return 0;
}
这段代码实际上实现不了它所想要表达的功能,而且程序会崩溃。
因为对于 Test 函数,将 str 变量传给 GetMemory 函数,实际上只是值传递,将 NULL 传给了 p ,然后 malloc 函数分配好空间后,将内存块地址传给 p ,但在 GetMemory 函数完成调用后 p 这个变量会被销毁,而这里的内存块的地址没有传到 str 中,这里就导致了内存泄漏,因为 p 在这里就相当于 str 的拷贝,所以这里的 str 还是 NULL ,然后再 strcpy 这一句,传给 strcpy 一个空指针是错误的,可能是这一步导致程序崩溃。
要解决这个问题就可以使用二级指针,直接对 str 的只进行修改,将 malloc 函数分配的内存块的地址存到 str 中,然后再进行后面的步骤。
修改后:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
vo