这是dubugging时的错误
编程接收信号SIGSEGV,分段故障。 [切换到 线程0x7ffff6ff5700(LWP 17504)] 0x000000000040124c在推送中 (q = 0x7ffff6ff4ec0,n = ...)在discover.h:27 27
Q-> TailCpuNode->接着=温度;
typedef struct CpuNode
{
struct CpuNode *next;
int cpuid;
}CpuNode;
typedef struct List
{ struct CpuNode *HeadCpuNode;
struct CpuNode *TailCpuNode;
}List;
inline static void push(struct List *q,CpuNode *n){
struct CpuNode *temp;
temp= (struct CpuNode *)malloc(sizeof(struct CpuNode));
temp->cpuid=n->cpuid;
temp->next=NULL;
if (q->HeadCpuNode==NULL) q->HeadCpuNode=q->TailCpuNode=temp;
else {
q->TailCpuNode->next=temp;
q->TailCpuNode=temp;
}
}
void Discover(struct List *Acqcores){
struct CpuNode *temp;
temp= (CpuNode *)malloc(sizeof(struct CpuNode));
temp->cpuid=1;
push(Acqcores,temp);
}
int main(int argc, char **argv) {
struct List Acq_cores;
Discover(&Acq_cores);
}
答案 0 :(得分:1)
您没有初始化Acq_cores
,因此您可以访问未初始化的变量。这是未定义的行为,可能会导致崩溃。
尝试:
struct List Acq_cores = {NULL, NULL};
除此之外,您还有内存泄漏。改为:
void Discover(struct List *Acqcores){
struct CpuNode *temp;
temp= (CpuNode *)malloc(sizeof(struct CpuNode));
temp->cpuid=1;
push(Acqcores,temp);
free(temp); // Add this
}
一般来说,你会做得更好:
void Discover(struct List *Acqcores){
struct CpuNode temp;
temp.cpuid=1;
push(Acqcores,&temp);
}
在此处查看演示http://ideone.com/rIYknh
答案 1 :(得分:0)
这些代码行存在问题:
CpuNode temp;
temp= malloc(sizeof(CpuNode));
应该是
CpuNode *temp;
temp= (CpuNode *)malloc(sizeof(CpuNode));
忘记临时前面的指针。
这是消除seg fault的代码。
inline static void push(List *q,CpuNode *n)
{
CpuNode *temp;
temp= (CpuNode *)malloc(sizeof(CpuNode));
temp->cpuid=n->cpuid;
temp->next=NULL;
if (q->HeadCpuNode==NULL)
q->HeadCpuNode=q->TailCpuNode=temp;
else
{
q->TailCpuNode=temp; //This line should come first.
q->TailCpuNode->next=temp;
}
}
void Discover(List *Acqcores)
{
CpuNode *temp;
temp= malloc(sizeof(CpuNode));
temp->cpuid=1;
push(Acqcores,temp);
}