C++ struct 函数传值的问题

罗键键 SW 程序  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就是为了能将结构体的内容全部复制一遍重新分配内存。。。怎么还是这样
...全文
157 点赞 收藏 15
写回复
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;
}
回复 点赞
骑着乌龟去看海 2014年01月20日
temp 是临时变量,出了这个函数temp就没了。 new/delete...
回复 点赞
罗键键 2014年01月19日
引用 1 楼 bbs2241 的回复:
指针指向的值释放掉了,动态分配
求明示。。。 我从没用过C++。。。最近要用C++做个东西。。。
回复 点赞
bobo_包子 2014年01月19日
指针指向的值释放掉了,动态分配
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告