Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 94
Завершенные тесты: 1
#1

new выделяет больше памяти, чем задано - C++

11.04.2013, 22:09. Просмотров 1388. Ответов 20
Метки нет (Все метки)

Здравия желаю!

При запуске программы с кодом
C++
1
2
3
4
5
6
7
8
void main()
{
    char *p;
    p=new char[5];
    cout<<strlen(p);
    _getch();
    delete []p;
}
вывод: 24.

Если при отладке посмотреть значение переменной получается массив из символов НННННээээ<<<<<<<<юоюоюою (как раз 24). Количество Н совпадает с размером нужной для выделения памяти. Почему так происходит?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 22:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос new выделяет больше памяти, чем задано (C++):

New выделяет больше памяти, чем необходимо - C++
Мне нужно переписать из строки String (да, именно String) в динамический массив char, ибо String переменной длины. Выделяю память равную...

Трёхмерный вектор занимает в четыре раза больше памяти, чем должен - C++
Создаю трёхмерный вектор таким способом vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt; dp; int n, k; void initializeVector () { dp.resize(n +...

Разработать программу, которая динамически выделяет 100 блоков памяти по 1000 байт каждый и освобождает их - C++
Всем привет. Подкинули на учебе вот такое задание - Напишите программу, которая динамически выделяет 100 блоков памяти по 1000 байт каж-дый...

Задано трехзначное число. Определить, какая из его цифр больше: первая или последняя. - C++
Задано трехзначное число. Определить, какая из его цифр больше: первая или последняя.

Задано натуральное число, разместить памяти последовательно все его цифры с помощью указателя - C++
Задано натуральное число, разместить их памяти последовательно все его цифры с помощью указателя.

Задано число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними - C++
Задано натуральное число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними. Может кто помочь в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Игорь с++
436 / 459 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
12.04.2013, 00:23 #16
Цитата Сообщение от ValeryS Посмотреть сообщение
О как!
Ага шайтан машина
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
12.04.2013, 00:27 #17
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Ага шайтан машина
Это не я
это цитаты со сторонних форумов
я же поставил, побаловался и... вернулся на VS2008
0
w8me
496 / 11 / 1
Регистрация: 10.04.2013
Сообщений: 44
12.04.2013, 00:32 #18
Оно может и выделяет 5 байт, только strlen'ом узнать это нельзя. Размер выделенной памяти можно узнать только если ф-я блокирует всю память вокруг этого участка , на вылете из него можно будет узнать его точный размер.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
12.04.2013, 00:36 #19
Цитата Сообщение от w8me Посмотреть сообщение
Оно может и выделяет 5 байт,
А может не выделяет когда стоит выравнивание может выделить 8
но дальше 5 не пустит

Добавлено через 1 минуту
Цитата Сообщение от w8me Посмотреть сообщение
Размер выделенной памяти можно узнать только если ф-я блокирует всю память вокруг
в дебаге блокирует (я про VS) а в релизе нет и весь алгоритм может рухнуть
0
w8me
496 / 11 / 1
Регистрация: 10.04.2013
Сообщений: 44
12.04.2013, 00:39 #20
Согласен , new выделяет память с помощью HeapAlloc , а msdn насчет его выравнивая молчит
Цитата Сообщение от ValeryS Посмотреть сообщение
в дебаге блокирует (я про VS) а в релизе нет и весь алгоритм может рухнуть
Так здесь они вроде и пытаются померять размер кучки которой им выделили
Для такой задачи нужен крах
0
Croessmah
Эксперт CЭксперт С++
13209 / 7480 / 841
Регистрация: 27.09.2012
Сообщений: 18,388
Записей в блоге: 3
Завершенные тесты: 1
12.04.2013, 06:36 #21
В студии есть не стандартная функция _msize. Размер можно узнать с помощью неё
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 06:36
Привет! Вот еще темы с ответами:

Realloc выделяет память для массива int и не выделяет память для массива double - C++
Скажите пожалуйста, почему вот этот код работает: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main()...

Не могу понять в чем утечка памяти - C++
bool CAvPlatform::DetectGameFolderAccessRights() { DWORD DesiredAccess = FILE_GENERIC_WRITE; DWORD GrantedAccess = 0; ...

Морской бой: расставляется кораблей больше, чем положено - C++
Здравствуйте! Пишу игру &quot;Морской бой&quot; в консоли, и попалась одна неприятная ситуация. Есть функция заполнения поля случайными кораблями,...

char массив, get(), ввести больше символов чем в массиве - C++
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { setlocale(LC_ALL,&quot;&quot;); char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.04.2013, 06:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru