Структура узла следующая:
struct Node {
int data;
Node *next;
bool someBool;
};
У меня есть следующая пара строк:
Node *hello = new Node{data, cur, !new_head}; // line A
array[new_head_index] = hello; // line B
} // line C
Значение new_head_index
подтверждается как 1 GDB навсе 3 строки.
GDB подтверждает, что в строках A, B и C, когда я делаю p *hello
(выведите содержимое hello
), я получаю:
(gdb) p *hello
$7 = {data = 888, next = 0x8414e70, someBool = false}
Но печать содержимого array@2
(массив имеет длину 2, объявленная в main как Node *heads[numHeads] = {new Node{0, nullptr, false}, nullptr};
) имеет это в строках B и C (до фактического выполнения строки):
(gdb) p **array@2
$8 = {{data = 777, next = 0x8414e70, someBool = true}, {data = 33, next = 0x378, someBool = 112}}
(узел 777ожидается, я заполнил это раньше).
Находясь в строке A, он имеет:
(gdb) p **array@2
$9 = {{data = 777, next = 0x8414e70, someBool = true}, {data = 61265, next = 0x0, someBool = false}}
По существу, hello
не присваивается array[1]
. Что может быть причиной этого?
Вот минимальный воспроизводимый пример: main.cc
#include <iostream>
#include <string>
#include "new_mod.h"
using namespace std;
int len(Node **array) {
int i = 0, count = 0;
while (array[i++]) { ++count; }
return count;
}
void attach(Node **array, int head, int index, int data) {
Node *hello = new Node{data, cur};
array[new_head_index] = hello;
}
int main() {
string command;
int head;
Node *array[numHeads] = {new Node{0, nullptr}, nullptr};
while (cin >> command) {
if (command == "a") {
int m, x;
cin >> head >> m >> x;
attach(array, head, m, x);
}
}
}
mod.h
#ifndef MOD_H
#define MOD_H
#include <ostream>
struct Node {
int data;
Node *next;
bool someBool = false;
};
const int numHeads = 2;
void attach(Node **array, int head, int index, int data);
#endif
Попробуйте вставить этоinput (я назвал этот файл a.in
)
a 0 0 777
a 0 1 888
Скомпилируйте с g++ -Wall -g main.cc -o newe
, чтобы вы могли что-то делать с GDB!
Кстати, вот что я сделал в GDBчтобы получить вышеуказанную проблему:
gdb newe
b attach(Node**, int, int, int)
run <a.in
layout n
c
n
n
n
n
n
n
n (comment: I did n until line Node *hello = new Node{data, cur};)
p **array@2
n
n
p **array@2 (the problem is shown)