C++ struct 函数传值的问题

罗键键 2014-01-19 07:45:40
今天碰到个问题。。。struct的值怎么都没办法从函数里面拿出来。
结构定义:
stuct password_digest
{
char* a;
char* b;
char* c;
}

函数是:
password_digest get_password_digest(struct password_digest & pdi)
{
password_digest pd_return;
......
char * temp = ".........................";
pd_return.a = temp;
memcpy(&pdi, &pd_return, sizeof(password_digest));
return temp;
}

我的目的是把函数里面生产的char* temp给传出来、用个结构装着其中内容,把结构传出来。。。

调用情况是:
password_digest pdi1, pdi2;
pdi2 = get_password_digest(pd1);

结果是:pd1和pd2中的a的地址和函数里的pd_return.a的地址是一样的。。。
在pdi2 = get_password_digest(&pd1)这行调试,值是传出来了,再执行两行。。。里面的数据全没了。。。
现在该怎么处理这样的问题。。。
上面用memcpy就是为了能将结构体的内容全部复制一遍重新分配内存。。。怎么还是这样
...全文
224 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
罗键键 2014-01-20
  • 打赏
  • 举报
回复
引用 11 楼 luoyuehao 的回复:
[quote=引用 10 楼 Binzo 的回复:] 这个结构体内都是指针,有什么用呢?
这样啊?那我换数组看看。。。[/quote] 结构里面char*改成数组就好了。。。 用char*就是不知道长度。。。现在用了个比较大的数组。。
cs74184235 2014-01-20
  • 打赏
  • 举报
回复
函数返回password_digest 类型但是你却写了char * 还有char *temp在函数中定义在函数中释放,你可以改用值传递。
richyhuang 2014-01-20
  • 打赏
  • 举报
回复
局部变量只能返回值,对于指针里面的是不会保持的。
漫步者、 2014-01-20
  • 打赏
  • 举报
回复
引用 9 楼 luoyuehao 的回复:
[quote=引用 6 楼 ganpengjin1 的回复:] memcpy(&pdi, &pd_return, sizeof(password_digest)); 注: 你的pdi指针成员数据需要内存空间,否则出错,你需要手动给它分配。,
谢谢 还是不行。。。 8楼我贴了代码。再帮我看看。。[/quote] password_digest* passwordDigest = new password_digest;,你这是给这个对象new了一下,你给它的数据成员a,b,c有new?至少我没有看到!楼主,你认为呢?
罗键键 2014-01-20
  • 打赏
  • 举报
回复
引用 10 楼 Binzo 的回复:
这个结构体内都是指针,有什么用呢?
这样啊?那我换数组看看。。。
Binzo 2014-01-20
  • 打赏
  • 举报
回复
这个结构体内都是指针,有什么用呢?
罗键键 2014-01-20
  • 打赏
  • 举报
回复
引用 6 楼 ganpengjin1 的回复:
memcpy(&pdi, &pd_return, sizeof(password_digest)); 注: 你的pdi指针成员数据需要内存空间,否则出错,你需要手动给它分配。,
谢谢 还是不行。。。 8楼我贴了代码。再帮我看看。。
罗键键 2014-01-20
  • 打赏
  • 举报
回复
引用 7 楼 starytx 的回复:
lz,你的函数能编译通过?
可以过。。VS2008。。。 我重新贴下代码吧。。。 还是不行。。。 调用方:

password_digest* passwordDigest = new password_digest;
	pdg->get_created(passwordDigest);
函数实现:

int CPasswordDigestGenerator::get_created(struct password_digest* &pdi)
{
	password_digest* pd_return = new password_digest;

	time_t now = time(NULL);
	time_t expires = now + 10;
	struct tm T, *pT = &T;
	char dest[1024] = "";
	if ((pT = gmtime(&now)))
	{
		strftime(dest, 1024, "%Y-%m-%dT%H:%M:%SZ", pT);
		pd_return->created = dest;
		if ((pT = gmtime(&expires))) 
		{
			char dest_1[1024] = "";
			strftime(dest_1, 1024, "%Y-%m-%dT%H:%M:%SZ", pT);
			pd_return->expires = dest_1;			
		}		
	}
	
	memcpy(&pdi, &pd_return, sizeof(password_digest));//这步运行后直接在delete的位置阻塞。。
	//strcpy(pdi->expires, pd_return->expires);//
	//strcpy(pdi->created, pd_return->created);//这两步运行出错。。。
	delete(&pd_return);
	return GENERATE_OK;
}
starytx 2014-01-20
  • 打赏
  • 举报
回复
lz,你的函数能编译通过?
漫步者、 2014-01-20
  • 打赏
  • 举报
回复
memcpy(&pdi, &pd_return, sizeof(password_digest)); 注: 你的pdi指针成员数据需要内存空间,否则出错,你需要手动给它分配。,
罗键键 2014-01-20
  • 打赏
  • 举报
回复
引用 3 楼 hm530 的回复:
temp 是临时变量,出了这个函数temp就没了。 new/delete...
嗯。。。当时觉得是这样的。。。所以找了个函数memcpy。。。。 结果发现cpy出来的数据也只是指向那个地址。。。就彻底崩溃了。。。。
sduxiaoxiang 2014-01-20
  • 打赏
  • 举报
回复

password_digest get_password_digest(struct password_digest & pdi)
{
    password_digest pd_return;
    ......
    char * temp = ".........................";
    pd_return.a = temp;
    strcpy(pdi.a, pd_return.a);
    strcpy(pdi.b, pd_return.b);
    strcpy(pdi.c, pd_return.c);
    return temp;
}
  • 打赏
  • 举报
回复
temp 是临时变量,出了这个函数temp就没了。 new/delete...
罗键键 2014-01-19
  • 打赏
  • 举报
回复
引用 1 楼 bbs2241 的回复:
指针指向的值释放掉了,动态分配
求明示。。。 我从没用过C++。。。最近要用C++做个东西。。。
bobo_包子 2014-01-19
  • 打赏
  • 举报
回复
指针指向的值释放掉了,动态分配

64,683

社区成员

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

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