2013-03-14 110 views
-2

實際上,這是一個純粹的C prog.When我編譯Xcode。沒有錯誤。但仍然無法獲得輸出,除非你強制停止它,否則這個過程不會停止。無法獲得輸出聯盟集

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int LocateElem(int *p1,int e,int leng1); 
void Display(int max, int array[]); 
int GetElem(int * p, int pass); 
int Union(int *p1,int *p2, int leng1, int leng2); 
int ListInsert(int **p, int e, int lengA); 
int* GetData(int* pArray, int Array_size); 
void Show(int *p, int leng); 

void InitList_Sq(int *L); 
int *p_A,*p_B; 
int m,n; 

int main() 
{ 
    clock_t begin, end; 
    double cost; 
    begin = clock(); 


    printf("How many elements of A u want:"); 
    scanf("%d",&m); 
    if (m<0) { 
     printf("Error!"); 
     return 0; 
    } 
    printf("How many elements of B u want:"); 
    scanf("%d",&n); 
    if (n<0) { 
     printf("Error!"); 
     return 0; 
    } 

    p_A=(int *)malloc(m*sizeof(int)); 
    p_B=(int *)malloc(n*sizeof(int)); 
    if (p_A==NULL) { 
     printf("Error allocating memory!\n"); //print an error message 
     return 0; //return with failure 
    } 
    if (p_B==NULL) { 
     printf("Error allocating memory!\n"); //print an error message 
     return 0; //return with failure 
    } 

    int *pLast_A, * pLast_B; 
    printf("Array A is :\n"); 
    pLast_A=GetData(p_A, m); 
    printf("\nArray B is :\n"); 
    pLast_B=GetData(p_B, n); 

    int newLeng; 
    newLeng=Union(p_A,p_B,m,n); 

    printf("\nThe Union set is :\n"); 
    Show(p_A, newLeng); 

    free(p_A); 
    free(p_B); 
    end = clock(); 
    cost = (double)(end - begin)/CLOCKS_PER_SEC; 
    printf("\n%lf seconds", cost); 
    return 1; 


} 


int* GetData(int* pArray, int Array_size){ 
    int* pFill= pArray; 
    int count; 
    srand((unsigned) time(NULL)); 
    for (count=0; count< Array_size; count++) { 
     *(pFill+count)=rand()%1000; 
     printf("%d\t", * (pFill+count)); 
    } 
    return pFill+count-1; 
} 


int Union(int *p1,int *p2, int leng1, int leng2){ 
    for (int count=0; count<leng2; count++) { 
     int e=GetElem(p2, count); 
     while(LocateElem(p1, e, leng1)==0){ 
      leng1=ListInsert(&p1, e, leng1); 
     } 
    } 
    return leng1; 
} 

int GetElem(int *p, int pass){ 
    return *(p+pass); 
} 

int LocateElem(int *p1,int e,int leng1){ 
    for (int count=0; count<leng1; count++) 
     if (e==*(p1+count)) 
      return 1; 
     else 
      return 0; 
} 

int ListInsert(int **p, int e, int lengA){ 
    lengA+=1; 
    int* temp; 
    temp=(int*)realloc(*p, lengA*sizeof(int)); 
    if (temp==NULL) { 
     printf("Error allocating memory!\n"); //print an error message 
     free(temp); 
     return 0; //return with failure 
    } 
    else{ 
     *p=temp; 
     *(*p+lengA-1)=e; 

    } 
    return lengA; 

} 

void Show(int *p, int leng){ 
    for (int count=0; count<leng; count++) { 
     printf("%d\t", *(p+leng)); 
    } 
} 

它保持運行並且空閒的內存一直在減少!請幫我。謝謝!

+0

沒有一個打算在這裏調試你的代碼 – 2013-03-14 16:14:22

+0

@aleguna:爲什麼? – 2013-03-14 16:15:18

回答

1

while(LocateElem(p1, e, leng1)==0) 

總是返回true,並且循環永遠不會退出,並保持運行線路:

leng1=ListInsert(&p1, e, leng1); 

這反過來又使分配內存永遠

int ListInsert(int **p, int e, int lengA){ 
    lengA+=1; 
    int* temp; 
    temp=(int*)realloc(*p, lengA*sizeof(int)); 
    . 
    . 
    .