1 #include <iostream> 2 3 void GetMemeory(char *p) 4 { 5 p = (char *)malloc(100); 6 } 7 void Test() 8 { 9 char *str = NULL; 10 GetMemeory(str); 11 strcpy(str, "Thunder"); 12 strcat(str + 2, "Downloader"); 13 printf(str); 14 }
程序崩溃
首先,函数为按值传递,所以p和str指向的是同一个NULL;
GetMemory函数执行完后,为p指向的空间增加了内存空间,但str仍然指向NULL;
要修改实参,就要传递实参的地址,因此需要传递二级指针,修改如下:
1 void GetMemory(char **p){ 2 *p = (char *)malloc(100); 3 } 4 5 void Test(){ 6 char *str = NULL; 7 GetMemory(&str); 8 strcpy(str,"Thunder"); 9 strcat(str+2,"Downloader"); 10 printf(str); 11 }