一、题目一💡💡
void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); }
请问运行Test 函数会有什么样的结果?
Test函数运行会导致程序崩溃,该函数存在如下问题:
- 对空指针解引用:虽然在GetMemory函数中动态申请了40个字节空间,但是程序调用完GetMemory之后,形参p就会消失,str得到的是一个空指针,strcpy函数和printf函数就是在对空指针进行解引用操作。
- 动态开辟的内存空间没有释放
对错误代码进行修改:
void GetMemory(char **p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(&str);使str指向动态开辟的内存空间 strcpy(str, "hello world"); printf(str); free(str);//对动态开辟的内存进行释放 str=NULL; }