gpt4 book ai didi

c++ - 使用双指针为结构成员赋值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:52 26 4
gpt4 key购买 nike

我有一个函数,它接受一个指向结构的双指针并赋值。但是,在尝试访问成员 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;
}

最佳答案

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

你被分配了一个内存块,大到足以容纳一个地址,并将它分配给一个指针,该指针指向一个指向 mystruct 成员的指针。这并不意味着您希望指向 mystruct 元素的指针中有一个有效地址。目前甚至没有一个有效的地址,指向指针的指针指向的位置,因为您刚刚为其分配了一个有效的内存区域,这并不意味着其中存储了一个有用的地址。

所以,你想要的是:

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

您正在做的是:您正在请求一个内存区域,您可以在其中(您甚至没有做的)将指针存储到另一个指针......等等。

所以你应该做的是:

mystruct **foo = new mystruct *;
*foo = new mystruct;

关于c++ - 使用双指针为结构成员赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19111117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com