Всем привет! Есть такой код, перегрузка оператора ввода в собственном классе строки, пишу для изучения:
friend istream& operator>>(istream& stream, MyString& input_string) {
char* input_data = nullptr;
int counter = 0;
char symbol;
while (true) {
if ((symbol = stream.get()) != '\n') {
input_data = (char* )realloc(input_data, ++counter);
static int a = strlen(input_data);
input_data[counter - 1] = symbol;
}
else {
input_data[counter] = 0;
break;
}
}
input_string.string = input_data;
input_string.size = input_string.length();
return stream;
}
Ожидалось, что переменная a
после первого вызова станет равна 1, и после каждого последующего вызова realloc
в цикле будет увеличиваться на единицу.
Однако, Visual Studio 2013 считает по-другому, и выделяет сразу 16 байт памяти, а после 4-х итераций как раз-таки выделяет по одному байту. Таким образом получается, что всегда в запасе есть лишние 12 байт мусора...
Собственно вопрос - дело в компиляторе? Или где-то мой косяк? Спасибо.
Функция strlen
определяет длину строки и ограничена нахождением первого нулевого байта.
Вместо size_t strlen(char const*)
предлагаю использовать size_t _msize(void*)
в Windows или size_t malloc_usable_size(void*)
в Linux, обе функции находятся в <malloc.h>
. Таким образом вы узнаете выделены объем памяти.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нигде не могу найти пояснение по вопросу "Что такое member types(типы-члены) в с++?", в документации тоже про них ничего не нашелВозможно, тут подскажете
Хочу сделать поиск в файле по количеству комнат и диапазону цен, всё по запросу пользователяЕсть пока лишь это
Вызов epoll_wait() по сути производит активное ожидание на переданных дескрипторах в течении таймаутаВопрос, то есть он полностью убивает одно...
Возникла необходимость написать обмен данными, между python и C++Работает все в локал хосте