2013-04-11 235 views
0

我有以下情况。我的目标是让a和b使它们都指向相同的记忆。但条件是它们都是指针。我该怎么做?指针结构

struct myStruct 
{ 
struct anotherStruct* anoStrct; 
}; 
main() 
{ 
    struct myStruct *a=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    struct myStruct *b=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    a=b; 


} 
+1

在你的代码中,你第一个'malloc'(原来的'a')丢失的内存区域是内存泄漏。使用内存泄漏检测器(例如Linux上的valgrind)和调试器。 – 2013-04-11 07:44:10

回答

6

你可以为一个指针,例如,a作为

struct myStruct *a= malloc(sizeof(struct myStruct)); 

分配空间,并指定这个指针b作为

struct myStruct *b = a; 

编辑:当您复制三分球,并利用它们对一些操作,你也必须小心复制即副本是浅拷贝还是深拷贝。请参阅What is the difference between a deep copy and a shallow copy?了解更多详情。

在上述代码段中,如果在初始化ba后执行以下语句,您将在原始指针已被释放时遇到分段错误。

free(b); 
a->anoStrct = malloc(sizeof(struct anotherStruct)); 
+4

您不应该需要投射malloc,请参阅http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – chrisw 2013-04-11 07:48:00

+0

@ chrisw69谢谢..我刚刚复制了该问题的陈述。当我的系统崩溃时,我正处于编辑过程中:) – Ganesh 2013-04-11 07:49:21

3
struct myStruct *a=malloc(sizeof(*a)); 
struct myStruct *b=a; 

注意,因为ab都指向相同的内存,更新一个会(显然)也影响其他。另外,您只能稍后在其中一个指针上调用free

您的建议代码还会使两个变量都指向相同的内存。但是,它泄漏了最初为a分配的内存。

+0

感谢哥们。也许是因为凌晨4点,我睡着了,我问了这个愚蠢的问题......你醒了我。:-) – sattu 2013-04-11 07:50:16

+1

@simonc **原来分配给b **的不是仪式。最初分配给'a'丢失 – 2013-04-11 08:05:59

+0

@Koushik谢谢,这对我来说是粗心的。现在纠正了。 – simonc 2013-04-11 08:08:39