Я новичок в C и мне интересно, можно ли удалить целый массив, а не только элемент, в C? В C++ есть delete[]
, есть ли что-то подобное в C?Удалить весь массив в C
ответ
В 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. */
В противном случае автоматические переменные автоматически освобождаются.
Если вы использовали malloc()
/calloc
просто использовать free()
:
type * ptr = malloc(n * sizeof(type));
if(ptr == NULL)
couldnt_allocate_memory();
/* ... */
free(ptr);
Если вы динамически распределяемой массив (с malloc()
), вы просто использовать free()
де-выделить его. Тогда вы больше не можете обращаться к указателю, поскольку вы больше не «владеете» памятью.
Вы можете просто использовать 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);
Создание вкладки: функции malloc или calloc. А затем бесплатную функцию для ее освобождения
В C, если вы объявляете свой массив как статический ex: int a [10], нет необходимости удалять. Он будет освобожден, когда ваша функция закончится или программа завершится. Если вы выделили память с использованием каких-либо методов выделения памяти [malloc, calloc], поскольку она выделена вами, должна быть освобождена самостоятельно, и вы используете бесплатный (ptr) для освобождения выделенного блока памяти.
Когда вы выделяете память на C с использованием malloc
, дополнительная (дополнительная информация) сохраняется после (или до) выделенного фрагмента. free
использует эту информацию, чтобы узнать, сколько памяти вы выделили, и освободите весь фрагмент. Итак, если вы выделили только один элемент, например struct, он будет освобождать только один элемент. Если вы выделили целый массив структуры, он освободит все это.
В C++ вы используете new
и new []
вместо malloc, который инициализирует значения с помощью конструктора. Вот почему есть два отличных delete
: один для одного значения (delete
) и один для массивов (delete []
).
1) Если declartion вашего массива был сделан таким образом:
int A[20];
Вашего массив не может быть удален, потому что он выделяется статический
2) Если declartion вашего массива был сделан в таким образом:
int *A=malloc(20 * sizeof(int));
//or
int *A=calloc(20, sizeof(int));
Ваш массив может быть удален с free(A)
, потому что он выделяется динамически
- 1. удалить весь массив
- 2. C# Cast Весь массив?
- 3. печать весь массив в C#
- 4. Удалить весь текст из файла, используя массив
- 5. C++ Указатель на весь массив
- 6. Монго удалить весь массив из коллекции
- 7. Удалить путь, а не весь массив
- 8. C - Строки в структурах, возвращающие весь массив
- 9. Builder C++ Удалить весь подузел в TreeNode
- 10. Назначить весь массив в другой массив в C через структуру
- 11. удалить массив [x] удалить значение, но не весь элемент
- 12. Как удалить массив в C#?
- 13. Е() печатает весь массив
- 14. Как удалить массив C++?
- 15. C++ указатель на весь массив. Освобождение памяти
- 16. Инициализировать весь массив символов
- 17. Удалить весь массив в многомерном массиве, где IndexOf = -1
- 18. Как хранить весь массив в другой массив
- 19. Как удалить весь массив, выбрав продукт из выпадающего списка?
- 20. C++ Массив указателей: удалить или удалить []?
- 21. Match Весь массив в Aggregation
- 22. Удалить весь индекс в ElasticSearch
- 23. Проверьте весь массив пуста
- 24. «Атомно» обновляет весь массив
- 25. Как прочитать весь файл в c в числовой массив
- 26. Скопируйте весь .txt-файл в массив символов в C++
- 27. array_filter, отфильтровывающий весь массив
- 28. popBackStack удалить весь стек?
- 29. MongoDB удалить объект из массива удаляет весь массив
- 30. C++ массив удалить Синтаксис оператора
Мое намерение состояло в том, чтобы удалить массив, чтобы я мог повторно использовать имя. То есть перезагрузите массив данными из другого файла при переключении уровня в игре. Спасибо за ваши ответы. – Nisse