Я должен звонить Близко на HttpWebResponse, даже если это в операторе использования?

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

Посмотрите на цикл 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]);
18
задан 4 revs, 3 users 61% 11 April 2016 в 15:17
поделиться

4 ответа

Если у Вас есть значительный код в использовании после того, как Вы закончили использовать ответ затем, верный вызов близко в порядке. Однако Вы могли бы хотеть рассмотреть рефакторинг Вашего кода так, чтобы код, для которого не нужен ответ, не был в блоке использования.

, Который сказал closeing, ответ не обязательно закрывает соединение. Протокол HTTP/1.1 делает условие для соединения, чтобы остаться открытым для выполнения последующих более быстрых запросов.

0
ответ дан 30 November 2019 в 06:46
поделиться

using ключевое слово является синтаксическим сахаром для try/finally блок, который переносит Ваш HttpWebResponse, так как это реализует IDisposable. Когда в finally пункт, это будет звонить Dispose() метод, который будет звонить Close(). Это означает, что Вы не должны явно звонить Close() метод.

16
ответ дан 30 November 2019 в 06:46
поделиться

Когда Dispose() назван на WebResponse (HttpWebReponse базовый класс), он звонит, это Close() метод для Вас. Быстрый взгляд с помощью Reflector подтверждает это.

Редактирование (в ответ на комментарий): Если это уже позвало Вас, почему вызов это явно? Ради ясности? Я думаю, понимают ли люди using (X x = ...) оператор, они поймут, что он закрывает базовое соединение. Вы ничего не получаете путем вызова его явно в этом случае.

28
ответ дан 30 November 2019 в 06:46
поделиться

Я верю, Близко метод, который реализует IDisposable. Расположите, поэтому нет определенно никакой потребности назвать Близкий метод заранее. Это полностью избыточно.

1
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: