【发布时间】:2019-11-03 14:03:01
【问题描述】:
Node的结构如下:
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 的值在所有 3 行上都被 GDB 确认为 1。
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
尝试输入此输入(我已将此文件命名为 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)
【问题讨论】:
-
minimal reproducible example 会更容易查看。
-
@PaulMcKenzie 好的,给你