-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;
}
4

2 に答える 2

3

この関数にはメモリリークはありません。ただし、この関数によって割り当てられたメモリが呼び出し元によって解放されない場合、メモリはリークされます。

于 2012-08-12T04:50:38.280 に答える
2

関数内に1つのmallocがあります:

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

この関数を呼び出すと:

bigint my_big_int = bi_create(my_string);

free出発する前にそれを忘れないでください:

free(my_big_int);

それでおしまい!

于 2012-08-12T04:52:16.817 に答える