问题
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