Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
98 / 34 / 10
Регистрация: 24.04.2012
Сообщений: 151
1

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

17.01.2013, 18:18. Просмотров 631. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2013, 18:18
Ответы с готовыми решениями:

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

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

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

Странное поведение транслятора
В следуюшем примере код компилируется нормально, но объект класса b не содается (пробывал на Visual...

6
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
17.01.2013, 18:42 2
Очевидно, в строке нет признака конца - нулевого символа.
0
98 / 34 / 10
Регистрация: 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
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
17.01.2013, 18:49 4
Как оно вообще собирается со слешем не в ту сторону?)
1
98 / 34 / 10
Регистрация: 24.04.2012
Сообщений: 151
17.01.2013, 19:10  [ТС] 5
согласен, со слешем я натупил, но вопроса это не снимает почему тогда sizeof(rezult) даёт 4 байта, я ведь память выделяю под 2?
0
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
17.01.2013, 19:13 6
sizeof возвращает размер самого указателя, а не данных, на которые он указывает. Указатель занимает 4 байта, все логично.
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
17.01.2013, 19:34 7
Размер строки должен быть на единицу больше, чем в ней есть символов, чтобы на конце записать '\0'. У тебя этого нет, поэтому после записанных символов оказывается мусор, который выводится до тех пор, пока не встретится ноль.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2013, 19:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Странное поведение присваивания
class Lexem { public: uint id; uint value; uint line; uint pos; bool...

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

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

Странное поведение указателя
#include &lt;iostream&gt; #include &lt;cstring&gt; int main(){ char line1=&quot;hello world!&quot;; char...


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

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

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