先ず、私はC言語の新機能で、Cを使用しなければならないプログラムに投げ込まれました。今では私の問題はポインタと関係していると思いますが、リストを印刷しようとすると(私が正しい順序でプログラムを保存していることを確認するために、私のプログラムが2回目のループの後でクラッシュする)印刷中の無限ループ
これは私の挿入機能で、必要最低限の時間で挿入します。ここに私の印刷がクラッシュ
void insertProcess(Process& process, Process* &head, Process* curr, Process* prev){
curr = head;
if(head == NULL){
head = &process;
}
else{
prev = head;
while(process.timeNeeded > curr->timeNeeded){
prev = curr;
curr = curr->next;
}
prev->next = &process;
process.next = curr;
}
}
としてそれをテストすることと、リストを印刷する必要があり、私の単純なループである。これは、「アクセスVIOを与える前に数回実行されます読み込み場所 '
while(curr->next != NULL){
printf("%s %i %i %i\n", process.processName, process.arrivalTime, process.timeNeeded, process.priority);
curr = curr->next;
}
エラーがこれらのコードセグメントの1つにあると確信していますが、私は助けていただければと思います。
編集:最初のポスターの助けを借りて元の問題を修正しましたが、今は印刷する際に無限ループが発生します。私は順番に挿入しているので、最後の項目の後にNULLポインタを設定しないので、それが本当に確実だろう。それは正しいと思われますか?そうであれば、それを修正する方法はありますか?あなたの機能のおかげで再び
'Process *&head'は有効ではありません。あなたは参照渡すことはできません。 – Dave
これをC++コンパイラでコンパイルしていますか? – Dave
私はCのことを知りませんでしたし、私のクラスが何をしていたのか、それを学ぶ時間も実際に私はよく知っていました。 Cを使用していた本当の理由は、C++のオブジェクト指向のプロパティを使用しないということでした。そして私はそれが正しいと思わなかったのですが、私が挿入を呼び出すたびに頭がリセットされていたことを知っていました。これを行う別の方法があれば、私はそれを喜んで修正します。 – user1019430