0

当我在顶部声明和初始化我的 List 数据结构然后调用我的函数 generateID 时,我有一个运行良好的程序。如果我在顶部声明列表并在函数内初始化列表,它也可以工作。但是我遇到的问题是使用线程来创建列表。我不断收到分段错误。

在我的程序顶部,我有我的声明。

列出* aLine;

在底部,我有两个功能。

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

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

现在,当我运行线程测试时,我得到了分段错误。我猜想在使用线程创建列表时,内存都搞砸了。但是我想不通为什么会有这个问题?我以相同的方式(使用线程)创建了一个播放器对象,并且程序运行良好。现在我正在尝试创建 List 数据结构,但它失败了。***注意 generateID() 使用 append 和 remove 来操作列表。

4

2 回答 2

2

Fork 新线程后,generateID() 会立即执行:线程可能尚未启动,或者它可能正在创建列表。

也许 generateID() 应该是不同线程中的函数,并且列表的创建应该在主线程中。

于 2011-10-14T06:46:13.617 回答
0

我想Fork创建一个新线程,因此,genereteID()在主线程中,有可能在尚未创建的情况下操作列表。尝试genereteID()在线程中调用,确保确实创建了列表。如果没有,请检查genereteID()正确的创建和列表初始化。

于 2011-10-14T06:37:07.593 回答