Как я могу освободить память, которую я использовал для переменной (например, длинной строки) в C?Как освободить память, которая была использована для переменной в C?
ответ
Предполагая, что вы назначили память динамически (используя malloc
или другой распределитель памяти), вы освободите его, используя free
. Если память была статически распределена, вы не можете ее освободить.
Проклятия! Опровергнуто снова!Обратите внимание, что некоторые из стандартных функций библиотеки вызывают malloc или calloc и оставляют за собой освобождение памяти от вызывающего. – dmckee 2008-10-11 18:47:50
@dmckee: могут быть сторонние или платформенные API-интерфейсы, требующие освободить() блок, который они возвращают, но я не знаю о каких-либо стандартных библиотечных функциях (кроме выделенных - malloc, calloc и realloc), которые сделай это. – 2008-10-12 00:22:24
Это действительно зависит от того, как вы заявляете, переменная - если это регулярная переменная вы не можете «DEALLOCATE» это память - она будет выпущена, когда он выходит из области видимости, как здесь:
for (int i=0;i<10;i++) {
int k=i;
//do stuff
}
я буду deallocated, когда вы выходите из цикла, и k будет выделено и освобождено на каждом проходе через тело цикла.
Когда речь идет о распределении времени выполнения памяти вы можете использовать свой испытанный таНос и бесплатно :)
int* intArray;
malloc(200 * sizeof(int));
Это даст вам массив 200 целых чисел.
Предполагая, что вы не используете таНос, и создания строки или буфера с помощью
char array[100];
Но вы знаете, что вы используете только это для очень короткой части длинной функции, вы можете просто разместить ту часть функции в другом множестве {}
int reallylongfunction() {
// Do a lot of stuff
{
char stringbuffer[100];
// Do stuff with the buffer...
// Ok, we're done with the buffer, and don't want it anymore
}
// Do a lot more stuff
return;
}
Это заставит буфер выходить из сферы, и будет освобожден. Будьте осторожны, хотя все, что вы объявляете внутри дополнительного {}, выйдет за рамки и исчезнет!
Редактировать: Черт, комментарии правильные. Статические строки, выходящие из области видимости, не приносят никакой пользы. Отредактировано так, что это всего лишь массив.
Я предлагаю вам ознакомиться с ustr, который представляет собой строковый API, который вы можете использовать с автоматическими, постоянными и динамически распределенными строками ... только два из которых вы можете фактически «освободить», но все из которых вы можете обращаться таким же образом и перейти к ustr_free().
Возможно, вы все еще хотите узнать, как «стек», «куча» и «данные» («текстовые строки RO») «распределены» и «освобождены» ... но с использованием полезного API, пока вы учитесь, что перестанет вам помогать вы много (и будете намного быстрее, чем то, что вы сделали бы самостоятельно).
На этот вопрос нельзя ответить без дополнительной информации. Единственный способ узнать, как освободить объект (или даже знать, должен ли он быть освобожден) - это знать, как был выделен объект.
И когда я говорю, объект, я имею в виду не только C++ «объект», но «объект», как используются в стандарте C:
области хранения данных в среде выполнения, содержание от , который может представлять значения
- 1. Как освободить память в C#, которая выделена в C++
- 2. Освободить память, которая была выделена с таНосом/Valgrind ошибка
- 3. Как освободить память в C?
- 4. как освободить память в C++
- 5. Как освободить память в C
- 6. Как освободить память для указателя в C
- 7. C LinkedList - как освободить память?
- 8. Как освободить неуправляемую память, которая была выделена путем сортировки с C# на C++
- 9. C++ как освободить память * char?
- 10. Как освободить/освободить память в игре android
- 11. C++: это освободить память для переменной, объявленной внутри цикла
- 12. Освободить память для объекта
- 13. Как освободить память для переменной, которую я возвращаю в функции
- 14. Невозможно освободить память в C
- 15. Невозможно освободить память в C
- 16. Как освободить память, выделенную указателю в C?
- 17. Получить java-версию, которая была использована для компиляции класса
- 18. Как освободить память?
- 19. как освободить память указателя в C
- 20. Как определить, была ли использована статическая переменная?
- 21. Как освободить виртуальную память?
- 22. Как освободить выделенную память в C++ DLL
- 23. Как освободить память в объективе-c?
- 24. Освободить память в Julia
- 25. Java: Итерация, чтобы найти точку координат, которая не была использована?
- 26. Освободить память, выделенная для дерева - C
- 27. строка, которая была использована в ParseInt - получить значение строки обратно
- 28. Как освободить память в iphone?
- 29. Как вычислить максимальную память, которая может быть использована приложением java
- 30. Освободить память
Может использовать некоторые пояснения. Вы динамически выделили эту память? Или позвонить в библиотеку, которая сделала это для вас? Вы пытаетесь восстановить память, связанную с автоматической или статической переменной? – dmckee 2008-10-11 18:57:14