Назначение указателя вызывает остановку программы - PullRequest
0 голосов
/ 21 июня 2011

Это действительно меня поразило, у меня есть программа, в которую я также добавляю некоторые дополнительные функции, и одна вещь, которую я пытаюсь сделать, это реализовать связанный список. Сначала немного кода:

#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%, пока программа «сидит». Кроме того, программа, к которой я добавляю список, является симулятором Simple-Scalar «sim-cache».

1 Ответ

1 голос
/ 21 июня 2011

Во-первых, я думаю, что вы можете упростить вашу функцию следующим образом:

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

Во-вторых, я почти уверен, что ваша ошибка исходит из другого места в вашем коде, возможно, некоторые другие функции, которые взаимодействуютс вашей глобальной переменной head ?Или это может быть что-то еще, конечно:)

...