尝试将int分配给对象时出现分段错误

时间:2019-06-09 12:43:14

标签: c++ segmentation-fault

我正在尝试将int值分配给对象属性。当我这样做时,就会发生分段错误。

我创建了一个setter函数,而不是立即尝试将其分配给公共财产,但这也导致了分段错误。

void list_item::set_value_1(int value)
{
     this->value_1 = value;
}

...

void list::add(int value1, int value2)
{
list_item* insert_item = new list_item;
insert_item->next = nullptr;
insert_item = this->tail;

this->tail = new list_item;
this->tail = this->tail->next;

insert_item->set_value_1(value1);
insert_item->set_value_2(value2);
this->size++;
}

确切的错误消息是Signal: SIGSEGV (Segmentation fault),它确实出现在应该设置该值的那一行。

2 个答案:

答案 0 :(得分:0)

我知道了:

我将insert_item初始化为list_item的新实例,但是用this->tail覆盖了它,但是它是一个空指针。

答案 1 :(得分:0)

只是一个猜测

void list::add(int value1, int value2)
{
list_item* insert_item = new list_item;
insert_item->next = nullptr;
insert_item = this->tail; // <- this looks suspicious

this->tail = new list_item; // <- this one too
this->tail = this->tail->next;

insert_item->set_value_1(value1);
insert_item->set_value_2(value2);
this->size++;
}

的组合
insert_item = this->tail; // <- this looks suspicious
// ...
insert_item->set_value_1(value1);

导致分段错误。成员list::tail可能此时尚未初始化。