Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > неправильное выделение памяти под


Автор: ICEMAN 13.4.2006, 18:32
Подскажаите в чём причина
Вобщем у меня описан вот такой класс
class spisokpred
{public:
char nazv[50];
int prepodav[10];
int numclas[10][1];
};

и есть
spisokpred Listpred[40];

при
char *a="";
a=Edit1->Text.c_str();
for(int i=0;i<b;i++)
{
Listpred[colpred].nazv[i]=a[i];
}

в предыдущий
Listpred[colpred-1].numclas[10][0] загоняется бешенное число

а текущий
Listpred[colpred].nazv становится быть равным "\x04" или "\x01"
где 01 или 04 значение то которое было в
Listpred[colpred-1].numclas[10][0]



Автор: Ctrl_Alt_Del 13.4.2006, 18:54
ICEMAN, не извращайся.
Код

class spisokpred
{
public:
     char nazv[50];
     int prepodav[10];
     int numclas[10][1];
};

spisokpred Listpred[40];

for(int i=0;i<b;i++)
{
     Listpred[colpred].nazv[i]=Edit1->Text[i];
}

Автор: _hunter 13.4.2006, 18:56
ну так разбивай тектовый случай на простейшие.
в данном случае делай так:
spisokpred Listpred;
и
char *a="";
a=Edit1->Text.c_str();
for(int i=0;i<b;i++)
{
Listpred.nazv[i]=a[i];
}
и пройдись по коду отладчиком.
+ зачем извращение с Edit1->Text.c_str();?
не проще ли так:
for(int i=0;i<b;i++)
{
Listpred.nazv[i]=Edit1->Text[i];
}
делать?
да и не до b считать нужно а до Edit1->Text.Length()

Автор: ICEMAN 13.4.2006, 19:05
ты всё праильно говоришь
у меня сначало так и было
просто я запрогался
и начал всяким извратом отлажывать когда не видел ошибку
просто я не заметил что
у меня numclas c 0-10
но 10 эл не существует
а я к нему обращался

Автор: _hunter 14.4.2006, 11:22
при поиске ошибок код обычно упрощают а не усложняют...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)