1

我正在尝试构建一个结构的对象,但是在分配值时遇到了分段错误。在我构建对象后,它将通过指针传递到列表中。这是我的实现:

struct clientInfo {
  int client, a, b;
};
List *info=new List();

void thread(int which) {
  clientInfo *cI;
  cI->client=which;
  cI->a=4;
  cI->b=5;
  info->Append(cI);
}

在执行“cI->client=which”期间,会产生分段错误。这个项目是在 nachos 平台上为任何熟悉的人编写的,但是 List 的定义与 C++ 中的任何链表大致相同。对于不熟悉玉米片的人来说,'void thread' 是我的'int main'。

提前致谢。

4

4 回答 4

4

clientInfo *cI;声明一个指向类型对象的指针clientInfo。它不构造这个对象。您必须在尝试访问其成员之前构建它:cI = new clientInfo();.

于 2012-03-27T07:06:18.127 回答
2

您必须创建clientInfo *cI, 像

clientInfo *cI = new clientInfo();
于 2012-03-27T07:05:36.630 回答
2

分配 ci->成员时,cI指针实际上指向“对您没有意义的地方” 。在使用它之前初始化指向存在的东西(或为其分配东西)的指针。

于 2012-03-27T07:06:16.143 回答
1

您不能直接将值分配给结构指针。应该使用 new 给它一些分配,例如:

 clientInfo *cI =new  clientInfo();

如果您不希望这样做,只需标记对象而不是指针 *cI。如下所示:

clientInfo cI;

现在您可以直接分配值cI.a=...,这些数据将存储在堆栈上而不是堆上。

于 2012-03-28T08:58:19.997 回答