↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Временно не работает,
как войти читайте здесь!
leprechaun
13 августа 2018
Aa Aa
#янепрогерятолькоучусь
Решила я тут, чтоб совсем не заплесневеть мозгом за лето, попробовать написать простенькую игрушку. И я была бы не я, если б всё работало.
Проблема такова:
Есть класс. У него есть три поля: int, int и char*. Так же есть private метод типа void, который по тем двум интам задаёт значение char*. Этот метод вызывается в конструкторе с заданными интами. Только вот на выходе (то есть, в месте, где конструктор и был вызван) получается экземпляр класса, у которого заданы интовые поля, а в char* поле хранится белиберда, которая при вызове деструктора и освобождении памяти вопит, что я лезу не в ту область памяти.
В общем, спасите-помогите: я в упор не понимаю, как это поправить.
(пишется вся эта хрень на плюсах)
13 августа 2018
20 комментариев из 23
Подпишусь.
Как память выделяете? Белиберда в переменной - это всегда тонкий намек, на то, что с её заполнением или выделением памяти что-то пошло не так.
id_september
я предполагаю, что из самого метода новое значение не передаётся
но я не знаю, почему так происходит
а вот код

сам класс:

class Line
{
private:
int num,
length;
char* view = NULL;

void buildView();
public:
Line();
Line(int len);
Line(int n, int len);
~Line();
};


метод:
void Line::buildView()
{
int n = num,
r;
view = (char*)malloc((length + 4) * sizeof(char));
view[length + 3] = '\0';
view[length + 2] = '|';
view[1] = '|';
view[0] = ' ';
for (int i = length + 1; i > 2; i -= 2)
{
r = n % 2;
n /= 2;
view[i] = r ? '-' : ' ';
view[i - 1] = view[i];
}
}


конструктор:
Line::Line(int n, int len)
{
if (len > 0)
length = len;
if (length % 2 == 1)
length++;

if (n >= 0)
num = n;
buildView();
}
Охренеть! Маллок! Правда, что ли?
Охренеть ещё раз!!!
pskovoroda
есть такое
надо бы поискать что-то менее странное, но пока руки не доходят
поэтому использую то, с чем знакома
> (пишется вся эта хрень на плюсах)
Но зачем? о_О
А вызываете как?
ufhhb2018
ни тот конструктор вызываешь, очевидна жы
ufhhb2018
либа делаишь delete вместа free
ufhhb2018
пакажи сись... полний код класса и как ти его визиваишь вместа ентага абрыфка
Не знаю, у меня получилось: https://onlinegdb.com/BJszavJLX
Передвинул *view в public для удобства. Ещё вот эта строка неправильная: view[length + 3] = ''; — тут должен быть пробел, а не пустой литерал.
Styx
вызываю просто вот так: buildView()
а вне класса этот метод, ясен пень, не вызывается
Когда вызывается конструктор по умолчанию, переменные класса не определены, поэтому непонятно, что там вообще будет работать.

Маллок в топку, в C++ есть new.
new тоже в топку и прикрутить STL, который стандартен в плюсе.
Styx
там даже не пробел, там символ конца строки, но фанфикс его упорно удаляет
ufhhb2018
там не хватает разве что деструктора, остальные методы в данном случае не важны

Line::~Line()
{
num = -1;
length = 0;
if (view != NULL)
{
free(view);
view = NULL;
}
}
leprechaun, посмотрите код по ссылке.
Styx
а разве оно не должно было сломаться из-за того, что символа конца строки нет?
leprechaun, а я там пробел вставил :)
Styx
как так? если я про него забывала, у меня глючило решительно всё
leprechaun, ну вот вставил там \\n, работает.
ПОИСК
ФАНФИКОВ







Закрыть
Закрыть
Закрыть