2015-05-13 97 views
0

我爲測試做了這個方法,由於某種原因malloc不工作。當我評論它它確實有用,但否則它只會說程序已停止工作。Malloc執行錯誤

typedef struct { 
    int NroUSP; // chave primária 
    int curso; 
    int estado; 
    int idade; 
    bool valido; // para exclusão lógica 
} REGISTRO; 

typedef struct s { 
    int NroUSP; // chave primária 
    int curso; 
    int estado; 
    int idade; 
    bool valido; 
    struct s* prox; 
} NO; 

typedef struct { 
    NO* inicio; 
} LISTA; 

這些都是我用^

編輯結構:問題是,這個星號權利之前AUX

void ex6(){ 
    REGISTRO* aux; 
    FILE *arq = fopen("C:\\Users\\jujuc_000\\Desktop\\Teste\\dados.bin","rb"); 
    FILE *arq2 = fopen("C:\\Users\\jujuc_000\\Desktop\\Teste\\ex6.bin","wb"); 
    LISTA l; 
    l.inicio = NULL; 
    NO*p = (NO*)malloc(sizeof(NO)); // this is the test malloc 
    if(arq){ 
     while(1==fread(&aux,sizeof(REGISTRO),1,arq)){ 
      /*p = (NO*)malloc(sizeof(NO)); // this is the one I want to keep 
      p->NroUSP = aux->NroUSP; 
      p->curso = aux->curso; 
      p->estado = aux->estado; 
      p->idade = aux->idade; 
      p->valido = aux->valido; 
      if(!l.inicio){ 
       l.inicio = p; 
      } 
      p=p->prox;*/ 
     } 
    } 

    fclose(arq); 
    fclose(arq2); 
} 
+1

「NO」的定義在哪裏?另外,不要投malloc:http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc。這很危險。 – rost0031

+0

它是否在'malloc'或'p = p-> prox'失敗? – Dinesh

+0

它不起作用?如果有錯誤信息,請將其包含在問題中。 –

回答

1

fread(&aux,sizeof(REGISTRO),1,arq)是最有可能你的問題。 aux是一個指向REGISTRO的指針,但是您試圖在完整的REGISTRO中讀入它,這很可能會覆蓋內存,從而導致下一行出現明顯的malloc故障。更改聲明爲:

REGISTRO aux; 

而且事情應該有效。

+0

不能:/仍然沒有工作。另外我試圖把malloc放在循環內部和外部,都不起作用。 –

0

嘗試以下操作:

  1. 使用FEOF()而不是如果(ARQ)...
  2. 集P-> PROX = NULL;
  3. 如果聲明它爲指針,則聲明'REGISTRO aux'或將內存分配給'aux'。