【问题标题】:Why can't I assign anything to an array anymore为什么我不能再为数组分配任何东西
【发布时间】:2013-03-20 18:39:35
【问题描述】:

我有一个链表类的实现(出于奇怪的原因使用 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'

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

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

【问题讨论】:

  • start 和 end 有什么值?还要第二次检查它们的值。
  • 每个节点存储字符串的一部分。 (作为一个字符数组)。所以这就是开始和结束。我确信这些值被正确传递了

标签: c++ arrays char iostream


【解决方案1】:

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

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

然后:

letters[i - start] = '\0'; // or end - start

【讨论】:

  • @user929404 我见过更糟糕的情况。
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2011-08-11
相关资源
最近更新 更多