несколько ошибок с malloc, аргументами, утечкой памяти и т. д. - PullRequest
0 голосов
/ 11 апреля 2011
#include<stdio.h>
#include<stdlib.h>

#define LOOPS 100
#define RAYSIZE 1024

int main (int argc, char **argv)
{
    int count = 0;
    char *pointer = NULL;

    for(count=0; count<LOOPS; count++) {
        pointer = (char *)malloc(sizeof(char) * RAYSIZE);
    }
    free(pointer);
    return count;
}

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

Каждый раз в цикле вы выделяете некоторую память и устанавливаете pointer, чтобы указать на нее.Когда вы это делаете, pointer больше не указывает на последний фрагмент памяти, но все равно выделяется вашей программе.Когда вы звоните free(pointer), вы освобождаете только последний выделенный блок памяти.

1 голос
/ 11 апреля 2011

Первые 99 раз вы теряете память, так как ваш бесплатный звонок находится за пределами цикла.Только последняя выделенная память освобождается.

0 голосов
/ 11 апреля 2011

У вас должно быть столько же звонков на malloc, сколько на free.Здесь вы вызываете malloc в цикле, что означает, что вам будет гораздо больше звонков, чем free.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...