gpt4 book ai didi

c++ - 段错误(核心已转储)- 通过对象访问结构成员时

转载 作者:行者123 更新时间:2023-11-28 00:38:37 27 4
gpt4 key购买 nike

我遇到了段错误(核心转储)错误并尝试使用 gdb 进行调试。我找到了错误发生的地方:

Program received signal SIGSEGV, Segmentation fault.
0x08048edb in state_update2 () at xxx.cpp:333
333 if (rob.head->is_complete == 1 && rob.head->ready_to_retire == 1 )

几行代码是:

    if(rob.head->is_complete == 1 && rob.head->ready_to_retire == 1) {
reorder_buffer_node *temp = new reorder_buffer_node[sizeof(struct reorder_buffer_node)];
temp = rob.head;
for(uint64_t i=0; i<f_; i++) {
if(temp->is_complete == 1 && temp->ready_to_retire == 1) {
rob.pop();
retired_inst++;
temp = temp->next;
}
else break;
}
}

ROB 是一个循环队列,head 是一个指向以下形式的结构的指针:

struct reorder_buffer_node {
int is_complete;
uint64_t instr_num;
uint64_t dest_reg;
uint64_t index;
reorder_buffer_node *next;
int ready_to_retire;
};

我是否没有以正确的方式访问结构的成员?请告诉我!

最佳答案

reorder_buffer_node *temp = new reorder_buffer_node[sizeof(struct reorder_buffer_node)]; 

//您是否正在尝试创建一个 reorder_buffer_node 数组并命名为 temp??

temp = rob.head;

//有了上面的注释这一行就不会出现了

temp = temp->next;

//你没有为结构写任何构造函数,因此使用默认构造函数,它的temp将被分配给垃圾或NULL。当您执行上述步骤时,它可能会提供段错误或崩溃。所以最好写一个构造函数。

如果遵循以下步骤,它将正确运行。

关于c++ - 段错误(核心已转储)- 通过对象访问结构成员时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936886/

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