以下程序,会存在什么问题?如果有问题,请更正. void GetMemory(char *p) { p = (char *)malloc(100); } void Test(char *s) { char *str = NULL; GetMemory(str); strcpy(str, s); printf(str); }
时间: 2024-03-06 09:50:04 浏览: 57
程序存储问题
以上程序存在问题,因为在GetMemory函数中分配的内存地址被赋值给了GetMemory函数中的局部变量p,而不是Test函数中的指针str。因此,在Test函数中使用str指针时,它指向的仍然是NULL,从而导致程序运行时出现段错误。
为了解决以上问题,可以将GetMemory函数修改为传入指针的地址,即将char *p改为char **p。这样,在GetMemory函数中分配的内存地址就可以通过指针的指针修改Test函数中的指针str所指向的地址。
修改后的代码如下:
```c++
void GetMemory(char **p) {
*p = (char *)malloc(100);
}
void Test(char *s) {
char *str = NULL;
GetMemory(&str);
strcpy(str, s);
printf("%s", str);
}
```
这样就可以正确地分配内存并使用指针str了。
阅读全文