这真的让我,我有一个程序,我正在添加一些额外的功能,我要做的一件事是实现一个链表。首先,一些代码:
#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”模拟器。
答案 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 交互的函数?或者它当然可能是其他任何东西:)