C++中指针的分段错误

Segmentation Fault with Pointers in C++

本文关键字:分段 错误 指针 C++      更新时间:2023-10-16

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

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"。

提前谢谢。

clientInfo *cI;声明了指向clientInfo类型对象的指针。它不构造此对象。您必须先构造它,然后才能尝试访问其成员:cI = new clientInfo();

您必须创建clientInfo *cI,如

clientInfo *cI = new clientInfo();

当分配ci->成员时,cI指针实际上指向"对您没有意义的地方"。在使用之前初始化指向现有对象的指针(或为其分配对象)。

您不能直接将值分配给结构指针。应该使用new like:对其进行一些分配

 clientInfo *cI =new  clientInfo();

如果你不想这样做,只需贴花对象,而不是指针*cI。如下所示:

clientInfo cI;

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