【问题标题】:Segmentation Fault with Pointers in C++C++ 中指针的分段错误
【发布时间】:2012-04-10 16:52:05
【问题描述】:

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

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

提前致谢。

【问题讨论】:

标签: c++ pointers segmentation-fault nachos


【解决方案1】:

你必须创建clientInfo *cI,比如

clientInfo *cI = new clientInfo();

【讨论】:

  • 你的无限智慧只比我无限的愚蠢更胜一筹。感谢您的快速回复。
【解决方案2】:

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

【讨论】:

  • FWIW,根据程序的编译方式,指针可能指向随机内存位置或 NULL。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

     clientInfo *cI =new  clientInfo();
    

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

    clientInfo cI;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2016-02-24
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2021-04-10
      相关资源
      最近更新 更多