0

動的に割り当てられた変数を関数に渡しています。その関数から戻った後、コードで入力を実行すると、それらの入力の一部によってプログラムがクラッシュします。

ご覧のとおり、私はargv配列を 2 回、最後に 1 回divide、そして から戻った後にもう1 回テストしdivideます。argv最初のチェックでは、 from indexのすべての値を取得します0argc2ndチェック ( from にdivide戻った後main) index0では、forループを crash にします。

だから明らかに私は何か間違ったことをしています。

4

1 に答える 1

1
argv =(char**) realloc(argv, (current+1)*sizeof(char*));

これが犯人の可能性が高いです。呼び出しrealloc()により、古いブロックからのデータがコピーされる新しい (おそらくより大きな) メモリ ブロックを割り当ててから、古いブロックの割り当てを解除できます。問題は、argvinの値を変更していることではなく、変更してmain()ないことです。argv新しいブロックを指すようにmain() を更新せずに、それが指すブロックの割り当てを解除しています。

于 2012-05-23T19:14:11.577 に答える