C++: kyde mi e gre6kata?
11 отговора
670 прегледа
C++: kyde mi e gre6kata?
koito otkrie gre6kata v slednia kod moolia da ne myl4i
struct TInfo:public TSearchRec
{
AnsiString asPathName;
char chPathbuf[255],chNamebuf[255];
int iLevel;
};
//vyv funkcia koiato obrabotva WM(windows syob6teniee)
//faila sydyrja kakvo triabva, no pri 4etene dava Access violation na niakoi si adres
TFileStream * f;
f=new TFileStream("d:/b",fmOpenRead);
for (int i=0;i<f->Size/sizeof(TInfo);i++)
{
struct TInfo * p;
p=new struct TInfo;
f->Read(p,sizeof(TInfo));
p->asPathName=(AnsiString)p->chPathbuf;
p->Name=(AnsiString)p->chNamebuf;
delete p;
}
delete f;
struct TInfo:public TSearchRec
{
AnsiString asPathName;
char chPathbuf[255],chNamebuf[255];
int iLevel;
};
//vyv funkcia koiato obrabotva WM(windows syob6teniee)
//faila sydyrja kakvo triabva, no pri 4etene dava Access violation na niakoi si adres
TFileStream * f;
f=new TFileStream("d:/b",fmOpenRead);
for (int i=0;i<f->Size/sizeof(TInfo);i++)
{
struct TInfo * p;
p=new struct TInfo;
f->Read(p,sizeof(TInfo));
p->asPathName=(AnsiString)p->chPathbuf;
p->Name=(AnsiString)p->chNamebuf;
delete p;
}
delete f;
Re: C++: kyde mi e gre6kata?
f->Read(p,sizeof(TInfo));
тук според мен се копира и AnsiString asPathName
Ама какъв е размера на AnsiString?
Опитай да ползваш само char []
и strcpy
sizeof(TInfo)=sizeof(TSearchRec)+sizeof( AnsiString)+2*255+sizeof(int)
Това ли ти трябва наистина?
Защо се опитваш два пъти да инициализираш asPathName?
тук според мен се копира и AnsiString asPathName
Ама какъв е размера на AnsiString?
Опитай да ползваш само char []
и strcpy
sizeof(TInfo)=sizeof(TSearchRec)+sizeof( AnsiString)+2*255+sizeof(int)
Това ли ти трябва наистина?
Защо се опитваш два пъти да инициализираш asPathName?
Re: C++: kyde mi e gre6kata?
sizeof(TInfo)=sizeof(TSearchRec)+sizeof( AnsiString)+2*255+sizeof(int)
to4no tova iskam.
AnsiString::Data ne se zapisva vyv faila zatova go buferiram v char[] i sled tova go vry6tam v AnsiString, znam 4e e typo i zaema dosta pamet no za sega niamam ideia kak da go zapi6a toia AnsiString taka 4e da go pro4eta sled tova
to4no tova iskam.
AnsiString::Data ne se zapisva vyv faila zatova go buferiram v char[] i sled tova go vry6tam v AnsiString, znam 4e e typo i zaema dosta pamet no za sega niamam ideia kak da go zapi6a toia AnsiString taka 4e da go pro4eta sled tova
Re: C++: kyde mi e gre6kata?
Ето тук:
for (int i=0;i<f->Size/sizeof(TInfo);i++)
Това "f->Size" не трябва ли да бъде "f->Size()"?
for (int i=0;i<f->Size/sizeof(TInfo);i++)
Това "f->Size" не трябва ли да бъде "f->Size()"?
Re: C++: kyde mi e gre6kata?
daj poveche kod, ne stavat jasni mnogo neshta
tova:
p->asPathName=(AnsiString)p->chPathbuf;
p->Name=(AnsiString)p->chNamebuf;
po-dobre da se napravi taka:
p -> asPathName = AnsiString (p -> chPathbuf);
p -> Name = AnsiString (p -> chNamebuf);
i posle AnsiString::operator = () triabva da osvobozdava pamet predi da prisvojava i t.n.
prosto ne stiga toja kod, deto si po pusnal tuka
kakvo tochno pravi TFileStream::Read?
tova:
p->asPathName=(AnsiString)p->chPathbuf;
p->Name=(AnsiString)p->chNamebuf;
po-dobre da se napravi taka:
p -> asPathName = AnsiString (p -> chPathbuf);
p -> Name = AnsiString (p -> chNamebuf);
i posle AnsiString::operator = () triabva da osvobozdava pamet predi da prisvojava i t.n.
prosto ne stiga toja kod, deto si po pusnal tuka
kakvo tochno pravi TFileStream::Read?
Re: C++: kyde mi e gre6kata?
zdrasti pich,
ami hubawo prawish
p = new struct TInfo;
obache posle f-Read( p, sizeof(TInfo)); ///?????
delete p; //az mislia che gyrmi tuk :)
ne e dobra ideia da chetesh taka obekti... ne znam razbira se
kakwo e TSearchRec, no ako ima po-osebn destructor...
primerno takyw sydyrjasht delete :))) shte gyrmi razbira se :)
ami hubawo prawish
p = new struct TInfo;
obache posle f-Read( p, sizeof(TInfo)); ///?????
delete p; //az mislia che gyrmi tuk :)
ne e dobra ideia da chetesh taka obekti... ne znam razbira se
kakwo e TSearchRec, no ako ima po-osebn destructor...
primerno takyw sydyrjasht delete :))) shte gyrmi razbira se :)
Re: C++: kyde mi e gre6kata?
Muha, vij sega:
struct TSearchRec
{
int Time;
int Size;
int Attr;
AnsiString Name;
int ExcludeAttr;
unsigned FindHandle;
_WIN32_FIND_DATAA FindData;
} ;
Kak triabva tova ne6to spored teb da go pro4eta ot fail?
struct TSearchRec
{
int Time;
int Size;
int Attr;
AnsiString Name;
int ExcludeAttr;
unsigned FindHandle;
_WIN32_FIND_DATAA FindData;
} ;
Kak triabva tova ne6to spored teb da go pro4eta ot fail?
Re: C++: kyde mi e gre6kata?
nali znae6 4e ima alignment na memberite? ne e korektno da pi6e6 i 4ete6 strukturi po tozi na4in wyw file. ediniq wariqnt e da go izkliu4i6 - na vc e s #pragma pack(1), no za wsi4ki kompilatori ima analogi4ni direktiwi, move bi edinstweniq problem 6te e AnsiString - kwo e towa? drugiq wariant e da si pi6e6 memberite edin po edin
За сериозното с малко на шега...
Виж сега,
Всички опитни програмисти (виждал съм ги) използуват доста често дебъгер.
Ако умееш да работиш с дебугер, проблема ще светне бързо. Ако не умееш,
"бегом бе,новобранецо скапан "...
И глей само кой ти дава акъл! Такъв като мен, дето знае за дебъгера, че "не е марка бира". Е, не чак пък. Туй като го гледам, ми прилича
на Borland C++ Builder,ама не ти знам версията за да ти кажа мнение за дебъ-
гера
Между впрочем, как беше не се сещам проблем със бакслаша вътре в стрингове? Я, го виж , че съм забравил вече.
Що се отнася за онзи странен клас AnsiString, доколкото си спомням, той
силно се отличава от сходния му вариянт CString (MS VCPP),и то в лошия смисъл
на думата. Каст операцията хич не ми харесва. Наистина е по добре да го
конструираш AnsiString(any char data).
Но все пак дебъгера му е майката...
Всички опитни програмисти (виждал съм ги) използуват доста често дебъгер.
Ако умееш да работиш с дебугер, проблема ще светне бързо. Ако не умееш,
"бегом бе,новобранецо скапан "...
И глей само кой ти дава акъл! Такъв като мен, дето знае за дебъгера, че "не е марка бира". Е, не чак пък. Туй като го гледам, ми прилича
на Borland C++ Builder,ама не ти знам версията за да ти кажа мнение за дебъ-
гера
Между впрочем, как беше не се сещам проблем със бакслаша вътре в стрингове? Я, го виж , че съм забравил вече.
Що се отнася за онзи странен клас AnsiString, доколкото си спомням, той
силно се отличава от сходния му вариянт CString (MS VCPP),и то в лошия смисъл
на думата. Каст операцията хич не ми харесва. Наистина е по добре да го
конструираш AnsiString(any char data).
Но все пак дебъгера му е майката...
Re: За сериозното с малко на шега...
ok pi4ove blagodaria na vsi4ki opravih si gre6kata.