函数的执行

changeyourmind 2016-06-26 10:52:29
#include "stdio.h"
#include "string.h"
#include "windows.h"
void GetMemory(char *cpStr)
{
cpStr = new char[100];
return;
}

void Test(void)
{
char *cp_str = NULL;
GetMemory(cp_str);
strcpy(cp_str,"Hello,world!");
printf(cp_str);

return;
}

void main()
{
Test();
}

请问程序会发生什么情况?以及详细解释产生此种情况的原因?
...全文
227 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
砌砖铺路前行 2016-06-27
  • 打赏
  • 举报
回复
程序会崩。原因2,3楼已经给出,至于修改,鉴于你程序的头文件引用形式是经典C,而不是C++,你的编译器可能无法认识引用语法,你就把传值改为传址就行了
FASM_FASM 2016-06-27
  • 打赏
  • 举报
回复
会出现内存泄漏,原因是你只分配了内存而没有释放它。
ooolinux 2016-06-26
  • 打赏
  • 举报
回复
Test函数的(char *)cp_str也即GetMemory函数的实参和GetMemory函数的形参(char *)cpStr是两个不同的变量,它们是传值的(把实参的NULL传给了形参cpStr),然后形参的cpStr得到了分配的缓冲区首地址(GetMemory函数返回cpStr变量无效缓冲区就丢失了造成内存泄露),并没有影响实参cp_str(仍然为NULL),然后strcpy(cp_str,"Hello,world!");失败。 把GetMemory函数的形参改成引用就可以了,void GetMemory(char *&cpStr),其它不变。
ooolinux 2016-06-26
  • 打赏
  • 举报
回复
void GetMemory(char *&cpStr) { cpStr = new char[100]; return; }

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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