2012-08-12 62 views
-2

有人能幫我找到我的內存泄漏嗎?我使用valgrind來檢查泄漏,我無法找到它報告的那些。謝謝!我的內存泄漏在哪裏?

bigint* bi_create(const char* charint) 
{ 

    int length = 0; 
    const char* temp; 
    int flag = 0; 

    temp = charint; 

    while(*charint != '\0') 
    { 

     length++; 
     charint++;    
    } 

    char chartoint[length]; 

    charint = temp; 

    //printf("LENGTH = %d \n", length); 

    bigint* bi = malloc(sizeof(bigint)); 

    bi->length = length; 

    int counter = 0; 

    bi->initialzero = 0; 

    while(*charint != '\0') 
    { 
     if(*charint == '0' && flag != 1) 
     { 
      (bi->initialzero)++; 
     }else 
     { 
      flag = 1; 
     } 

     chartoint[counter] = *charint; 

     // printf("CHARTOINT = %c \n", chartoint[counter]); 
     charint++; 
     counter++; 

    } 

    bi->data = atoi(chartoint); 

    printf("DATA = %d \n", bi->data); 
    // printf("INITIAL ZERO = %d \n", bi->initialzero); 

    return bi; 
} 
+0

他說他用valgrind。 – Barmar 2012-08-12 04:47:37

+1

你的代碼的其餘部分在哪裏? – TOC 2012-08-12 04:49:01

+0

該功能可以肯定使用一些簡化。第一個while循環可以用'length = strlen(charint)'代替。在第二個while循環中,爲什​​麼要複製到圖表中?爲什麼不只是'bi-> data = atoi(charint)'? – Barmar 2012-08-12 04:58:35

回答

3

這個函數沒有內存泄漏。但是,如果由該函數分配的內存未被調用方釋放,則會被泄漏。

+0

謝謝。我知道我必須釋放內存,但是我的代碼存在問題。 – caspnet 2012-08-12 05:03:38

2

裏面你的函數有一個malloc的

bigint* bi = malloc(sizeof(bigint)); 

當你調用這個函數:

bigint my_big_int = bi_create(my_string); 

離開之前不要忘記free它:

free(my_big_int); 

就是這樣!