Повторный вызов по тому же указателю - PullRequest
2 голосов
/ 12 октября 2011

Что происходит, когда я использую разные последовательные функции calloc для одного и того же указателя?

int *ptr;
ptr = (int *) calloc(X, sizeof(int));
ptr = (int *) calloc(Y, sizeof(int));
ptr = (int *) calloc(Z, sizeof(int));

Где X, Y, Z - три разных значения.

Ответы [ 3 ]

7 голосов
/ 12 октября 2011

Вы потеряете соединение с ранее выделенной памятью и больше не сможете его освободить - утечка памяти

3 голосов
/ 12 октября 2011

Вы потеряете ранее выделенную память, если потеряете средства для ее освобождения.

2 голосов
/ 12 октября 2011

То же самое происходит, когда вы присваиваете значение переменной int снова и снова (с дополнительной проблемой утечки памяти)

int i;
i = 42;
i = 0; // where's the 42?
i = 1; // where's the 42? and the 0?
i = 42; // where's the 42? -- Oh! I see it! :) -- and the 0? and the 1?
...