指针分配导致程序停止

时间:2011-06-21 15:12:47

标签: c pointers linked-list freeze

这真的让我,我有一个程序,我正在添加一些额外的功能,我要做的一件事是实现一个链表。首先,一些代码:

#include <stdio.h>
#include "host.h"
#include "misc.h"
#include "machine.h"

struct miss_pile{
  md_addr_t tag;
  unsigned int isCon;
  char block_type;
  char culprit_type;
  struct miss_pile * next;

}*head=0, *linkPtr, *tail=NULL, *newLink;
typedef struct miss_pile mp;

void add_beg(md_addr_t new_tag/*int new_tag*/, char blk_type, char evicter_type){

  newLink = (mp *)malloc(sizeof(mp));
  newLink->tag = new_tag;
  newLink->block_type = blk_type;
  newLink->culprit_type = evicter_type; 
  newLink->isCon = 0;

if (head == NULL){
     head=newLink;
     head->next=NULL;
     head->tag = new_tag;
     head->block_type = blk_type;
     head->culprit_type = evicter_type;
     head->isCon=0; 
  }
 else if (head != NULL)
  {
    newLink->next=head;
    head = newLink;
  }
}

我已经确定这条线是程序似乎停止的地方

head=newLink;

一旦我排除了这段代码,该程序运行正常,但当然它是非常重要的代码。任何帮助或见解将不胜感激!

需要注意的一点是,当程序“坐”时,处理器保持在100%。此外,我正在添加列表的程序是SimpleScalar的“sim-cache”模拟器。

1 个答案:

答案 0 :(得分:1)

首先,我认为您可以像这样简化您的功能:

void add_beg(md_addr_t new_tag/*int new_tag*/, char blk_type, char evicter_type){

    newLink = (mp *)malloc(sizeof(mp));
    newLink->tag = new_tag;
    newLink->block_type = blk_type;
    newLink->culprit_type = evicter_type; 
    newLink->isCon = 0;
    /* on the first call, head is NULL, and it's exactly what we want */
    newLink->next = head;
    /* then head point to the new element */
    head = newLink;
}

其次,我很确定你的bug来自你代码中的其他地方,可能是其他一些与你的全局变量 head 交互的函数?或者它当然可能是其他任何东西:)