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)
您刚刚创建了一个新的mystruct指针.这意味着:
您将获得一个内存块,大小足以容纳一个地址,并将其分配给指向指向mystruct成员的指针的指针.这并不意味着,指针中有一个有效的地址保持,您希望指向一个mystruct元素.甚至更多的是,甚至没有一个有效的地址,指向指针的指针指向,因为你刚刚给它分配了一个有效的存储区域,这并不意味着存储了一个有用的地址.
所以,你想要的是:
您需要一个具有有效内存块的指针来存储另一个指针的地址,该指针指向一个有效的内存区域,其中mystruct存储了一个(可能是有效的).
你正在做的是:你正在请求一个你可能存在的内存区域(你甚至没做什么)将一个poitner存储到另一个指针......等等.
所以你应该做的是:
mystruct **foo = new mystruct *;
*foo = new mystruct;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2274 次 |
| 最近记录: |