关于大结构体内存分配

jesson1018 2008-11-20 03:16:43
小弟遇到一个棘手的内存分配问题,请各位大虾不吝指教。
原先的结构体如下(B1和B2本身又是一个嵌套的结构体),
struct A{
struct B1 b1;
struct B2 b2;
};
用到上述结构体的函数如下:
RC_Code_t param_check(const genericTrigger &Trigger,......)//genericTrigger 是一个类,类中的一个结构体变量逐级能引用到A结构体中的成员
{
const flag_t=&Trigger.***.***.****.b1;//注意到这里逐级引用到了上述结构体中的成员
const flag_t=&Trigger.***.***.****.b2;
...........
}
以上代码是完全正确的。


现在我将A结构体改成如下所示:------原先的结构体变量变成了结构体指针
struct A{
struct B1 *b1;
struct B2 *b2;
};

RC_Code_t param_check(const genericTrigger &Trigger,......)//genericTrigger 是一个类,类中的一个结构体变量逐级能引用到A结构体中的成员
{
const B1 flag_t=Trigger.***.***.****.b1;//注意到这里逐级引用到了上述结构体中的成员
const B2 data_t=Trigger.***.***.****.b2;
...........
}
这样就出现了可怕的段错误!!!
为了是A结构体中的两个指针成员能够得到正确的地址,我将代码改成了如下:
RC_Code_t param_check(const genericTrigger &Trigger,......)//genericTrigger 是一个类,类中的一个结构体变量逐级能引用到A结构体中的成员
{
const flag_t=NULL;
const data_t=NULL;
Trigger.***.***.****.b1=new B1();
Trigger.***.***.****.b2=new B2();
flag_t=Trigger.***.***.****.b1;
data_t=Trigger.***.***.****.b2;
//然后在引用到结构体B1和B2中的各个成员
..........
..........
delete Trigger.***.***.****.b1;
delete Trigger.***.***.****.b2;
}
但是依然失败,错误原因依然同上!!!
我现在怀疑仍然是指针地址不正确或者是内存分配失败!小弟非常着急!!!!!
说明一点:定义类genericTrigger、定义结构体A和定义函数param_check 分别为3个不同的文件。
请各位大虾帮我排查一下原因,小弟万分感激各位!!!
我现在充分怀疑到我的结构体内存分配有问题,但是不知道为什么会出现这样的严重问题,难道是我的分配位置不对,或者我不该在定义函数的那个文件中进行内存分配??
小弟疑惑啊。。。。。。。。
...全文
302 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallening 2008-11-21
  • 打赏
  • 举报
回复
....
一头雾水
楼主可否把问题精简一点
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
给一个类似的代码
帮你修改下哈
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
但是依然失败,错误原因依然同上!!! 
我现在怀疑仍然是指针地址不正确或者是内存分配失败!


内存是几乎不可能分配失败的,在现在的计算机里面,除非你的内存是1m的老条子
hai040 2008-11-21
  • 打赏
  • 举报
回复
delete后加上
flag_t=data_t=*.b2=*.b1=NULL;
jesson1018 2008-11-21
  • 打赏
  • 举报
回复
1楼的大虾能说的清楚些吗?
Trigger是一个类的引用,不好意思,data_t和flag_t的定义我写错了,它们也都是结构体指针
如下
const B1 * flag_t=Trigger.***.***.****.b1;//注意到这里逐级引用到了上述结构体中的成员
const B2 * data_t=Trigger.***.***.****.b2;
dzc8866 2008-11-20
  • 打赏
  • 举报
回复
时间紧迫,只能帮你UP
帅得不敢出门 2008-11-20
  • 打赏
  • 举报
回复
const B1 flag_t=Trigger.***.***.****.b1;//注意到这里逐级引用到了上述结构体中的成员
const B2 data_t=Trigger.***.***.****.b2;
你这里是把指针 赋值给 对象了.

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧