老师出的内存问题,大家说说答案(不上机前提下),并能解释一下原因~~~

EmilMatthew 2004-12-21 05:44:17
Q1
#include <conio.h>
#include <stdio.h>
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf("%s",str);
}
void main(void){
Test();
getch();
}
Q2
#include <stdio.h>
#include <conio.h>
char *GetMemory(void)
{char p[]="hello world";
return p;
}
void Test (void)
{char *str=NULL;
str=GetMemory();
printf("%s",str);
}
void main(void){
Test();
getch();
}

...全文
172 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
generalxzd 2004-12-21
  • 打赏
  • 举报
回复
都是高人,佩服
EmilMatthew 2004-12-21
  • 打赏
  • 举报
回复
哇,高手真多啊,懂了好多,谢谢大家~~~
findawork 2004-12-21
  • 打赏
  • 举报
回复
RisingStar(三宝):传出的总比传入的多一维指针就对 不错简单易懂
oyljerry 2004-12-21
  • 打赏
  • 举报
回复
Q1 传递的是指针,函数内传值调用,并没有分配空间给传入的指针
sasdaa 2004-12-21
  • 打赏
  • 举报
回复
liem(阿明)说的对!
lideshun2000 2004-12-21
  • 打赏
  • 举报
回复
这不是林锐的题目吗??你们老师也叫你们做?你们学校真行
RisingStar 2004-12-21
  • 打赏
  • 举报
回复
Q1里 改为 void GetMemory(char **p);调用就会避免错误。调用时直接用指针改值就不会发生错误。传出的总比传入的多一维指针就对。
liem 2004-12-21
  • 打赏
  • 举报
回复
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
由于C是传值调用,因此调用GetMemory(str);后,并没有为str分配空间,str仍是NULL
改为:
char * GetMemory(int n)
{
char *p=(char*)malloc(n);
return p;
}

调用时str=GetMemory(100);
icansaymyabc 2004-12-21
  • 打赏
  • 举报
回复
Q1: 在windows下运行发生内存访问违例,程序退出。在DOS下运行直接导致死机。
Q2:在windows下运行发生内存访问违例,程序退出。在DOS下运行输出“hello world”,正常退出。
yevv 2004-12-21
  • 打赏
  • 举报
回复
Q2
#include <stdio.h>
#include <conio.h>
char *GetMemory(void)
{char p[]="hello world";//这是临时在栈上开辟的存储空间 GetMemory结束后就会被编译器释放
return p;
}
void Test (void)
{char *str=NULL;
str=GetMemory();//相当于引用了已经清理过的内存单元 里边是什么是未定义的
printf("%s",str);
}
void main(void){
Test();
getch();
}
yevv 2004-12-21
  • 打赏
  • 举报
回复
Q1
#include <conio.h>
#include <stdio.h>
void GetMemory(char *p)
{
p=(char*)malloc(100);//进行了动态存储分配 不过没有释放 导致内存泄漏
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf("%s",str);
free(str);//这样就避免了存储泄漏
}
void main(void){
Test();
getch();
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧