1

我有一个链表类的实现(出于奇怪的原因使用 char 数组)

list_node::list_node(const std::string & input, int start, int end) {
std::cout << "1 arg constructor called" << std::endl;

letters = new char[end - start + 1];
int i = start;

for (i = start; i < end; i++) {
    letters[i] = input[i];
}

letters[i] = '\0';

std::cout << letters << std::endl;
previous = NULL;
next = NULL;
}

我无法理解的是,第一次调用此方法时,它起作用了。此后,它没有。单步执行 Eclipse 中的调试器,for 循环的主体根本不执行!我添加了

letters[i] = '\0'

确保我的数组以空值结尾,没有区别。

我有另一种方法,它接收指向链表中前一个节点的指针。我只是省略了它

4

1 回答 1

3

似乎您实际上并不想使用 索引lettersi因为它从 开始start。如果start大于0,那么您最终会跑过动态分配的数组的末尾。相反,你想要:

letters[i - start] = input[i];

进而:

letters[i - start] = '\0'; // or end - start
于 2013-03-20T18:41:42.430 回答