Segmentation Fault with Pointers in C++

 ̄綄美尐妖づ 提交于 2019-12-02 11:45:33

问题


I am trying to build an object of a struct but am getting a segmentation fault while assigning the values. After I build the object it will be passed by pointer into a list. Here is my implementation:

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);
}

During the execution of 'cI->client=which' a segmentation fault is produced. This project is being writting on the nachos platform for anyone that is familiar, however the definition of List is much the same as any linked list in C++. For anyone not familiar with nachos, 'void thread' is my 'int main'.

Thanks in advance.


回答1:


You have to create the clientInfo *cI, like

clientInfo *cI = new clientInfo();



回答2:


clientInfo *cI; declares a pointer to an object of type clientInfo. It does not construct this object. You have to construct it before trying to access its members: cI = new clientInfo();.




回答3:


The cI pointer is actually pointing "nowhere meaningful to you" when ci->members are assigned. Initilize the pointer to something existent (or allocate something for it) before use it.




回答4:


You cannot directly assign values to a structure pointer.it should be given some allocation using new like :

 clientInfo *cI =new  clientInfo();

If you dont wish to do this just decalre the object rather than a pointer *cI. like below:

clientInfo cI;

Now you can directly assign values like cI.a=... and this data will be stroed on stack and not on heap.



来源:https://stackoverflow.com/questions/9884768/segmentation-fault-with-pointers-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!