2014-05-10 28 views
-1

當我嘗試並通過func調用realloc時,我的內存填滿了真正的快速,但是當我在main()中執行它時很好。realloc函數正在填充內存,但運行良好main()

你能告訴我爲什麼這樣。非常感謝。

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

typedef struct { 
    char qp[500]; 
} xy; 

void fl(xy **ptr, int k) 
{ 
    int i; 
    xy *p=NULL; 

    p=(xy*)realloc(p,k*sizeof(xy)); 
    if(p!=NULL) 
     *ptr=p; 
    else 
     system("pause"); 
} 

int main() 
{ 
    FILE *fd; 
    char tmp[500]; 
    int n,z,h; 

    xy *p=NULL,*ptr; 

    p=(xy*)malloc(sizeof(xy)); 
    fd=fopen("files\\dirfl_id.txt","r"); 
    n=0; 
    while(!feof(fd)) { 
     fflush(stdin); 
     fscanf(fd,"%d\t%[^\n]s",&h,tmp); 
     if(feof(fd)) 
      break; 
     n++; 
     fl(&p,n); 
     strcpy(p[n-1].qp,tmp); 
     printf("\n%d,%s",n-1,p[n-1].qp); 
    } 

    printf("\n\n%s",p[0].qp); 
} 

當我嘗試運行相同的代碼,但沒有使用函數調用時,它將加載正常。我正在加載的文件大約1mb大,所以它不應該是一個問題。但是它仍會使我的系統崩潰。

+0

刪除'p =(xy *)malloc(sizeof(xy));'at main。 'p =(xy *)realloc(p,k * sizeof(xy));' - >'p =(xy *)realloc(* ptr,k * sizeof(xy));'at f1。 – BLUEPIXY

回答

1
xy *p=NULL; 
// ... 
p = realloc(p, newsize); 

realloc(NULL, size)malloc具有相同的效果。你想要第一行是xy *p=*ptr;,那麼實際的重新分配將會發生。

+0

非常感謝! – csaw

相關問題