2012-08-12 147 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); 

就是这样!