2013-11-20 72 views
0

我試圖使此代碼工作,但我不明白爲什麼它崩潰。它應該從文件中讀取數據,並將其按照向量排序(插入排序)。 proc是Process_t的一個向量,proc.name是一個char [10],proc [0]是在(硬編碼)和num_proc == 1之前插入的。該文件的第一個寄存器被正確捕獲,但之後崩潰在realloc()中)。Realloc:動態向量中的結構無效的下一個大小

size = 1 
    while(size > 0) 
    { 
     // Read a process from the config file and add to the vector in a sorted way 
     printf("%d\n", num_proc); 
     proc = realloc(proc, sizeof(Process_t)*num_proc); 
     printf("%d\n", num_proc); 

     size = fscanf(cfgfd, "%hhd %s\n", &hwmodid, buf); 
     printf("%d %d %s\n", num_proc, hwmodid, buf); 

     i = num_proc-1; 
     while(i > 1 && proc[i].hwmodid > hwmodid) 
     { 
      strcpy(proc[i+1].name, proc[i].name); 
      proc[i+1].hwmodid = proc[i].hwmodid; 
      proc[i+1].pid = proc[i].pid; 
      proc[i+1].fiforfd = proc[i].fiforfd; 
      proc[i+1].fifowfd = proc[i].fifowfd; 
      proc[i+1].paused = proc[i].paused; 
      --i; 
     } 
     strcpy(proc[i+1].name, buf); 
     proc[i+1].hwmodid = hwmodid; 
     proc[i+1].pid = -1; 
     proc[i+1].fiforfd = -1; 
     proc[i+1].fifowfd = -1; 
     proc[i+1].paused = 0; 
     ++num_proc; 

     printf("%d %s %d %d %d %d %d\n", i, proc[num_proc-1].name, proc[num_proc-1].hwmodid, proc[num_proc-1].pid, proc[num_proc-1].fiforfd, proc[num_proc-1].fifowfd, proc[num_proc-1].paused); 
    } 
+0

在此之前你已經爲'proc'分配了內存嗎?或者將'proc'初始化爲'NULL'? –

+0

proc具有1個結構的大小。我剛剛意識到我在重新分配大小時錯過了+1。愚蠢的錯誤是最難找到的。 – markmb

+0

來自MAN的@JoachimPileborg:realloc()將ptr指向的內存塊的大小更改爲字節大小。內容將保持原有尺寸和最小尺寸的最小值;新分配的內存將被初始化。如果ptr爲NULL,則對於所有大小的值,調用等價於malloc(size);如果size等於零,並且ptr不爲NULL,那麼調用等價於free(ptr)。除非ptr爲NULL,否則它必須早先通過調用malloc(),calloc()或realloc()返回。如果指向的區域被移動,則完成一個空閒(ptr)。 NULL很好,單元化不好。 – Jekyll

回答

0

我剛剛意識到我錯過了+1時重新分配。我正在分配我已有的東西(起初我有1,並且正在分配1並插入1)。插入的矢量的第一個元素是運氣好的。很難找到的愚蠢錯誤。

相關問題