void GetMemory(char **p, int num){ if(NULL == p && num <= 0)//1 return; *p = (char*)malloc(num); return; } void main(void){ char *str = NULL; GetMemory(&str, 80); //2 if(NULL != str){ strcpy(&str, "hello"); //3 printf(str); } return true; //4 }
void GetMemory(char **p, int num){ if(NULL == p && num <= 0)//1 return; *p = (char*)malloc(num); return; } void main(void){ char *str = NULL; GetMemory(&str, 80); //2 if(NULL != str){ strcpy(&str, "hello"); //3 printf(str); } return true; //4 }
1
2
3
4
if(p == NULL || num <= 0) return;
这样可以保证在参数有误时不会继续执行后面的代码。
strcpy(str, "hello");
return;
改正以上问题后,完整的代码应该如下所示:
void GetMemory(char **p, int num){ if(p == NULL || num <= 0) return; *p = (char*)malloc(num); return; } int main(void){ char *str = NULL; GetMemory(&str, 80); if(str != NULL){ strcpy(str, "hello"); printf("%s\n", str); free(str); // 释放内存 } return 0; }
这样就能够正常分配内存并释放内存,输出 hello 字符串了。