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

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

Войти
Регистрация
Восстановить пароль
 
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
#1

Странное поведение new - C++

17.01.2013, 18:18. Просмотров 431. Ответов 6
Метки нет (Все метки)

Объясните почему оператор new выделяет неверное количество памяти?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# include <iostream>
using namespace std;
char* interpitator( int dig, int sys);
void main ()
{
    interpitator( 35, 18);
    interpitator( 27, 16);
    interpitator( 13, 5);
}
char* interpitator( int dig, int sys)
{
    char* rezult;
    int counter[10] , i = 0, j = 0, t = 0;
    char arry[36] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G',
    'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    while(dig)
    {
        counter[i++] = dig % sys;
        dig = dig/sys;
    }
    
    rezult = new char[i];//тут начинается интересное
    cout<<i<<endl;//проверяем i = 2 всё верно
    cout<<strlen(rezult)<<endl;// а строка = 14 ??? почему???
    memset( rezult, '/0', i);
    for( int j = i-1; j >= 0; j--) 
        rezult[t++] = arry[counter[j]];
    cout<<rezult<<endl;//поэтому сдесь после значения печатается мусор всякий
    cout<<endl;
    
    return rezult;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странное поведение new (C++):

Странное поведение - C++
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки,...

Странное поведение программы - C++
Перечитываю Герберт Шилдт: С++ базовый курс. Простая программа: #include &lt;iostream&gt; using namespace std; int main() { ...

Странное поведение программы - C++
Здравствуйте, у меня проблема. В силу какой-то причины результатом вычисления выражения при значениях PA и PB равных 0 и 1 соответственно,...

Странное поведение присваивания - C++
class Lexem { public: uint id; uint value; uint line; uint pos; bool operator==(int a){ return a...

Странное поведение указателей - C++
Здравствуйте, может кто-нибудь объяснить столь странное поведение указателя. Вот код. int main() { const int Width = 3; ...

Странное поведение транслятора - C++
В следуюшем примере код компилируется нормально, но объект класса b не содается (пробывал на Visual studio 10 и на Borland builder 5), что...

6
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
17.01.2013, 18:42 #2
Очевидно, в строке нет признака конца - нулевого символа.
0
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
17.01.2013, 18:47  [ТС] #3
хорошо после такой манипуляции тоже самое
C++
1
2
3
4
    
memset( rezult, '/0', i);
cout<<i<<endl;//проверяем i = 2
cout<<strlen(rezult)<<endl;// а строка = 14
сначала обнулили потом посчитали
0
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
17.01.2013, 18:49 #4
Как оно вообще собирается со слешем не в ту сторону?)
1
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
17.01.2013, 19:10  [ТС] #5
согласен, со слешем я натупил, но вопроса это не снимает почему тогда sizeof(rezult) даёт 4 байта, я ведь память выделяю под 2?
0
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
17.01.2013, 19:13 #6
sizeof возвращает размер самого указателя, а не данных, на которые он указывает. Указатель занимает 4 байта, все логично.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.01.2013, 19:34 #7
Размер строки должен быть на единицу больше, чем в ней есть символов, чтобы на конце записать '\0'. У тебя этого нет, поэтому после записанных символов оказывается мусор, который выводится до тех пор, пока не встретится ноль.
1
17.01.2013, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 19:34
Привет! Вот еще темы с ответами:

Странное поведение компилятора - C++
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в...

Странное поведение string - C++
Здравствуйте. Сейчас я пытаюсь скомпилировать под Windows проект, который ранее писался под Linux. Делаю я это с помощью MinGW от...

Странное поведение cin - C++
Перегружаю оператор ввода следующим образом: #include &lt;iostream&gt; using namespace std; class Vector2D { public: ...

Странное поведение кода - C++
int x; cout &lt;&lt; (x = 1) + (x = 2) + (x = 3); У меня выводит 7 (вместо 6). Почему?!?!


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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