Когда я объявляю массив (структур) внутри функции, освобождается ли память автоматически после возврата или я должен освобождать ее вручную?C: Массив, объявленный внутри функции
mezo pre_tabla[8][8]
Когда я объявляю массив (структур) внутри функции, освобождается ли память автоматически после возврата или я должен освобождать ее вручную?C: Массив, объявленный внутри функции
mezo pre_tabla[8][8]
Если вы объявляете массив статически, вам не нужно освобождать его вручную. Но если вы распределите массив динамически (используя malloc() или calloc()), вам нужно освободить его вручную. Для экс -
статического объявления ниже:
struct info {
char p;
int x;
};
struct info arr[10]; // doesn't require to free it.
динамического распределения ниже:
struct info *c;
c = malloc(sizeof(info) * 10); // dynamic memory allocation, needs to be freed via free() system call
Определения Внутри функции даст память в стеке, который будет очищен, как только область видимости функции будет die.Using динамического распределения памяти потребуется отдельный бесплатный звонок.
Если массив не объявлен как static
память должна быть освобождена, когда программа выходит из области видимости, в которой массив объявляется.
Все локальные переменные/структуры распределены в стеке.
Когда вы вводите функцию, у вас есть указатель стека и адреса, которые используются для хранения данных, связаны с ним.
Когда вы возвращаетесь из функции, указатель стека обновляется, чтобы соответствовать функции вызывающего абонента, поэтому можно сказать, что память освобождается автоматически.
+----------+
| |
| f1 var1 |<--- f1() stack pointer
| f1 var2 |
| f1 arr[0]|
| ..... |
| f1 arr[N]|
| f2 var1 |<--- f2() stack pointer
| f2 var2 |
| f1 arr[0]|
| ..... |
| f1 arr[N]|
+----------+
Вы не выделили. Так что вам нечего освобождать. Кто бы это ни сделал, он позаботится и о последствиях: P –
Если вы не использовали 'malloc()' или аналогичный вызов, вам не нужно использовать 'free()'. Времена, чтобы устать от этого - при вызове кода (например, в библиотеке), который выполняет выделение, которое не является очевидным; прочитайте документацию по вызовам библиотеки, чтобы узнать свои требования. – mah