2013-03-08 5 views
2

Я новичок в C и мне интересно, можно ли удалить целый массив, а не только элемент, в C? В C++ есть delete[], есть ли что-то подобное в C?Удалить весь массив в C

+0

Мое намерение состояло в том, чтобы удалить массив, чтобы я мог повторно использовать имя. То есть перезагрузите массив данными из другого файла при переключении уровня в игре. Спасибо за ваши ответы. – Nisse

ответ

0

В C++ вы не вызываете delete, если вы не использовали new. Если вы не использовали динамическое распределение, вы не освобождаете память.

В C, посмотрите на malloc и free, если вы хотите контролировать срок службы ваших массивов.

#include <stdlib.h> 

int *array = malloc (size_in_bytes); 

/* Some stuff. */ 

free (array); /* When I don't need it anymore. */ 

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

0

Если вы использовали malloc()/calloc просто использовать free():

type * ptr = malloc(n * sizeof(type)); 
if(ptr == NULL) 
    couldnt_allocate_memory(); 
/* ... */ 
free(ptr); 
1

Если вы динамически распределяемой массив (с malloc()), вы просто использовать free() де-выделить его. Тогда вы больше не можете обращаться к указателю, поскольку вы больше не «владеете» памятью.

3

Вы можете просто использовать free, чтобы удалить динамически выделенный массив.

int* array = malloc(10*sizeof(int)); 
... 
free(array); 

Если выделена память для каждого элемента массива, вы также должны free каждый элемент первого.

char** array = malloc(10*sizeof(char*)); 
for (int i=0; i<10; i++) { 
    array[i] = malloc(i); 
} 
.... 
for (int i=0; i<10; i++) { 
    free(array[i]); 
} 
free(array); 
0

Создание вкладки: функции malloc или calloc. А затем бесплатную функцию для ее освобождения

0

В C, если вы объявляете свой массив как статический ex: int a [10], нет необходимости удалять. Он будет освобожден, когда ваша функция закончится или программа завершится. Если вы выделили память с использованием каких-либо методов выделения памяти [malloc, calloc], поскольку она выделена вами, должна быть освобождена самостоятельно, и вы используете бесплатный (ptr) для освобождения выделенного блока памяти.

1

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

В C++ вы используете new и new [] вместо malloc, который инициализирует значения с помощью конструктора. Вот почему есть два отличных delete: один для одного значения (delete) и один для массивов (delete []).

1

1) Если declartion вашего массива был сделан таким образом:

int A[20]; 

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

2) Если declartion вашего массива был сделан в таким образом:

int *A=malloc(20 * sizeof(int)); 
//or 
int *A=calloc(20, sizeof(int)); 

Ваш массив может быть удален с free(A), потому что он выделяется динамически

Смежные вопросы