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;


}
4

2 回答 2

6

例如,您可以为一个指针分配空间,a

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

并将此指针分配给bas

struct myStruct *b = a;

编辑:当您复制指针并将它们用于某些操作时,您还必须小心复制,即复制是浅复制还是深复制。请参考深拷贝和浅拷贝有什么区别?更多细节。

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

free(b);
a->anoStrct = malloc(sizeof(struct anotherStruct));
于 2013-04-11T07:43:53.487 回答
3
struct myStruct *a=malloc(sizeof(*a));
struct myStruct *b=a;

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

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

于 2013-04-11T07:42:51.450 回答