У меня есть эта программа. Я слышал, что память, выделенная с помощью malloc, может быть освобождена вне функции, в которой она была выделена, но, очевидно, я не могу освободить z в main. Есть ли утечка памяти в этой программе?Будет ли эта программа вызывать утечку памяти?
#include <stdio.h>
#include <stdlib.h>
int *add(int x, int y);
int main(int argc, char const *argv[]) {
int *x = NULL;
x = add(5, 4);
printf("%d\n", *x);
free(x);
return 0;
}
int *add(int x, int y) {
int *z = malloc(sizeof(int));
*z = x + y;
return z;
}
Нет, утечки памяти здесь нет. Но вам все равно нужно проверить, действительно ли пространство выделено, а 'z' - не-NULL. –
Не то, что вы можете отлично сделать это 'z [0] = x + y;', а также объявить указатель и вызвать 'malloc()' в одной строке, может быть запутанным, из-за оператора присваивания он может выглядеть так, как будто вы разыменование указателя с помощью '*'. –