使用双指针为struct的成员赋值

tzi*_*ppy 5 c++ pointers pass-by-reference pass-by-pointer

我有一个函数,它接受一个结构的双指针并赋值.但是,当我尝试访问该成员时,我收到了"访问违规写入位置..." member1.这是我的代码:

struct mystruct{
  unsigned int member1;
  void * data;
};

int main(){

  mystruct **foo = new mystruct *;
  bar(foo);

}

void bar(unsigned int val, mystruct ** foo)
{
    (*foo)->member1 = val;
}
Run Code Online (Sandbox Code Playgroud)

dhe*_*ein 5

您刚刚创建了一个新的mystruct指针.这意味着:

您将获得一个内存块,大小足以容纳一个地址,并将其分配给指向指向mystruct成员的指针的指针.这并不意味着,指针中有一个有效的地址保持,您希望指向一个mystruct元素.甚至更多的是,甚至没有一个有效的地址,指向指针的指针指向,因为你刚刚给它分配了一个有效的存储区域,这并不意味着存储了一个有用的地址.

所以,你想要的是:

您需要一个具有有效内存块的指针来存储另一个指针的地址,该指针指向一个有效的内存区域,其中mystruct存储了一个(可能是有效的).

你正在做的是:你正在请求一个你可能存在的内存区域(你甚至没做什么)将一个poitner存储到另一个指针......等等.

所以你应该做的是:

mystruct **foo = new mystruct *;
*foo = new mystruct;
Run Code Online (Sandbox Code Playgroud)