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'

私の配列がnullで終了していることを確認しても、違いはありません。

リンクされたリストの前のノードへのポインターを受け取る別のメソッドがあります。省略しただけ

4

1 に答える 1

3

で始まるため、実際には でインデックスlettersを作成したくないようです。が より大きい場合、動的に割り当てられた配列の最後を超えて実行されることになります。代わりに、次のことが必要です。istartstart0

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

その後:

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