中易网

C++问题,跪求下面4个指针是为什么错,求详解。

答案:2  悬赏:80  
解决时间 2021-01-15 10:49
  • 提问者网友:心如荒岛囚我终老
  • 2021-01-14 13:27
C++问题,跪求下面4个指针是为什么错,求详解。
最佳答案
  • 二级知识专家网友:長槍戰八方
  • 2021-01-14 13:39
第一种,p=(char*)malloc(100);简单的给形参p赋值为新分配的内存地址,不过我们知道,改变形参的值,并不能改变实参的值,所以char *str=NULL;在GetMemory运行之后,仍然是NULL指针。
第二种,char p[]="hello world";,这是堆栈上的临时变量,只在函数调用到GetMemory的时候有效,GetMemory返回到Test中的时候,已经无效了

第三种,无论如何,free之后的指针不应该继续使用,它不会立即出错,但是会在将来的某个时刻,毁掉你的程序。
第四中,通过传递地址调用,可以为str实际赋值为有效内存地址,通常都是这么做的。
追问:第二个GetMemory()时不是已经将字符串赋值给*str了吗?
追答:赋值是赋值了,只不过这个值是临时有效的,因为是堆栈上的内存。
赋值的时候,GetMemory函数已经结束了吧,结束了就无效了。
全部回答
  • 1楼网友:夜风逐马
  • 2021-01-14 14:01
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *GetMemory(int n) { //  参数及返回类型都变了
return (char *)malloc(n);
}
void Test(void) {
char *str = GetMemory(100); // 这样获得动态内存
strcpy(str,"hello world ");
printf(str);
free(str); // 返还是必要的。
}
int main() {
Test();
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息