Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的内存泄漏在哪里?_C - Fatal编程技术网

C 我的内存泄漏在哪里?

C 我的内存泄漏在哪里?,c,C,有人能帮我找到内存漏洞吗?我用valgrind检查泄漏,但我找不到它报告的泄漏。谢谢 bigint* bi_create(const char* charint) { int length = 0; const char* temp; int flag = 0; temp = charint; while(*charint != '\0') { length++; charint++;

有人能帮我找到内存漏洞吗?我用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;
}

此函数中没有内存泄漏。但是,如果调用方没有释放此函数分配的内存,它将泄漏。

在函数中有一个malloc:

bigint* bi = malloc(sizeof(bigint));
调用此函数时:

bigint my_big_int = bi_create(my_string);
在离开之前,不要忘了释放它:

free(my_big_int);

就这样

剩下的代码在哪里?这个函数肯定需要一些简化。第一个while循环可以替换为
length=strlen(charint)
。在第二个while循环中,为什么要复制到ChartPoint?为什么不直接做
bi->data=atoi(charint)
?谢谢。我知道我必须释放内存,但我的代码有问题。