C++: kyde mi e gre6kata?

11 отговора 670 прегледа
#1

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;

Отговор
в отговор на gre6nik #2

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?

Отговор
в отговор на bira_more #3

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

Отговор
в отговор на gre6nik #4

Re: C++: kyde mi e gre6kata?

Ето тук:

for (int i=0;i<f->Size/sizeof(TInfo);i++)

Това "f->Size" не трябва ли да бъде "f->Size()"?

Отговор
в отговор на Pesho® #5

Re: C++: kyde mi e gre6kata?

ne e Size e properity ne funkcia

Отговор
в отговор на gre6nik #6

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?

Отговор
в отговор на gre6nik #7

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 :)

Отговор
в отговор на muha #8

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?

Отговор
в отговор на gre6nik #9

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

Отговор
в отговор на gre6nik #10

За сериозното с малко на шега...

Виж сега,
Всички опитни програмисти (виждал съм ги) използуват доста често дебъгер.
Ако умееш да работиш с дебугер, проблема ще светне бързо. Ако не умееш,
"бегом бе,новобранецо скапан "...
И глей само кой ти дава акъл! Такъв като мен, дето знае за дебъгера, че "не е марка бира". Е, не чак пък. Туй като го гледам, ми прилича
на Borland C++ Builder,ама не ти знам версията за да ти кажа мнение за дебъ-
гера
Между впрочем, как беше не се сещам проблем със бакслаша вътре в стрингове? Я, го виж , че съм забравил вече.
Що се отнася за онзи странен клас AnsiString, доколкото си спомням, той
силно се отличава от сходния му вариянт CString (MS VCPP),и то в лошия смисъл
на думата. Каст операцията хич не ми харесва. Наистина е по добре да го
конструираш AnsiString(any char data).
Но все пак дебъгера му е майката...

Отговор
в отговор на gre6nik #11

Re: C++: kyde mi e gre6kata?

wse pak, na koi red gyrmi?

Отговор
в отговор на Любoмиp Гaнoв #12

Re: За сериозното с малко на шега...

ok pi4ove blagodaria na vsi4ki opravih si gre6kata.

Отговор