0

上部にあるリストデータ構造を宣言して初期化し、関数generateIDを呼び出すと、完全に実行されるプログラムがあります。リストを上部で宣言し、関数内でリストを初期化した場合にも機能します。しかし、私が抱えている問題は、スレッドを使用してリストを作成することです。セグメンテーションエラーが発生し続けます。

私のプログラムの一番上に、私の宣言があります。

List * aLine;

一番下には、2つの機能があります。

void CreateListA(int which)
{
   aLine = new List;
   currentThread->Yield();
}

void ThreadTest()
{
   Thread *gA = new Thread("Creates new List A");
   gA->Fork(CreateListA, 1);
   generateID();
}

スレッドテストを実行すると、セグメンテーションエラーが発生します。スレッドを使ってリストを作成するときに、メモリがすべて台無しになった場所があると思います。しかし、なぜこれに問題があるのか​​理解できませんか?同じ方法で(スレッドを使用して)プレーヤーオブジェクトを作成しましたが、プログラムは正常に機能しました。リストデータ構造を作成しようとしていますが、失敗します。*** generateID()は、リストを操作するために追加と削除を使用することに注意してください。

4

2 に答える 2

2

新しいスレッドをフォークすると、generateID()がすぐに実行されます。スレッドがまだ開始されていないか、リストの作成の途中にある可能性があります。

たぶん、generateID()は別のスレッドの関数であり、リストの作成はメインのスレッドである必要があります。

于 2011-10-14T06:46:13.617 に答える
0

Fork新しいスレッドを作成すると思いますので、genereteID()メインスレッドでまだ作成せずにリストを操作することは可能です。genereteID()リストが実際に作成されたことを確認して、スレッドで呼び出してみてください。genereteID()そうでない場合は、正しい作成とリストの初期化をチェックインしてください。

于 2011-10-14T06:37:07.593 に答える