Вы освобождаете слишком много вашей первоначальной памяти.
Посмотрите на цикл for, когда вы освобождаете память:
(*size)++;
//delocating the allocated memories
for (int i = 0; i < size; i++)
free(original[i]);
Так как size
- это int *
, вы получите очень большое количество итераций, которые освободятся для освобождения. гораздо больше памяти, чем вы выделили. Чтобы это исправить, сделайте следующее:
(*size)++;
//delocating the allocated memories
for (int i = 0; i < *size; i++)
free(original[i]);
Теперь вы все еще освобождаете один элемент слишком сильно, так как вы увеличиваете * размер при добавлении нового элемента. Окончательная версия для освобождения оригинальной памяти
(*size)++;
//delocating the allocated memories
for (int i = 0; i < *size - 1; i++)
free(original[i]);
Если у Вас есть значительный код в использовании после того, как Вы закончили использовать ответ затем, верный вызов близко в порядке. Однако Вы могли бы хотеть рассмотреть рефакторинг Вашего кода так, чтобы код, для которого не нужен ответ, не был в блоке использования.
, Который сказал closeing, ответ не обязательно закрывает соединение. Протокол HTTP/1.1 делает условие для соединения, чтобы остаться открытым для выполнения последующих более быстрых запросов.
using
ключевое слово является синтаксическим сахаром для try/finally
блок, который переносит Ваш HttpWebResponse
, так как это реализует IDisposable
. Когда в finally
пункт, это будет звонить Dispose()
метод, который будет звонить Close()
. Это означает, что Вы не должны явно звонить Close()
метод.
Когда Dispose()
назван на WebResponse
(HttpWebReponse
базовый класс), он звонит, это Close()
метод для Вас. Быстрый взгляд с помощью Reflector подтверждает это.
Редактирование (в ответ на комментарий): Если это уже позвало Вас, почему вызов это явно? Ради ясности? Я думаю, понимают ли люди using (X x = ...)
оператор, они поймут, что он закрывает базовое соединение. Вы ничего не получаете путем вызова его явно в этом случае.
Я верю, Близко метод, который реализует IDisposable. Расположите, поэтому нет определенно никакой потребности назвать Близкий метод заранее. Это полностью избыточно.