Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ubite me ako sam normalan

[es] :: C/C++ programiranje :: ubite me ako sam normalan

[ Pregleda: 4125 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon ubite me ako sam normalan28.03.2006. u 22:39 - pre 219 meseci
Code:

case CTRL_IZMENI:
{
    char * dir = (char *)malloc((MAX_PATH+20) * sizeof(char));
    GetCurrentDirectory(MAX_PATH, dir);
    strcat(dir, "\\pera.txt");
    FILE * fAjl = fopen(dir, "r");
    free(dir);
    fseek(fAjl, 0, SEEK_END);
    int size = ftell(fAjl);
    rewind(fAjl);
    char * Bafer = (char *)malloc(size * sizeof(char));
    int i=0;
    while ((*(Bafer+i) = fgetc(fAjl)) != EOF) i++;
    fclose(fAjl);
    MessageBox(hWnd,Bafer,"Procitao",MB_OK);
    free(Bafer);
    break;
}


Dakle, ovo je obrada poruke WM_COMMAND mog cenjenog dugmeta CTRL_IZMENI i pri izvršavanju linije :
free(Bafer);
dolazi do "Debug Error"-a i kada traceujem, odvede me u neki dbgheap.c fajl gde puca funkcija CheckBytes. UBI ME!!

Ako neko ima neku ideju, neka proba...
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

peka
Beograd

Član broj: 3947
Poruke: 124
..taman-bg.customer.sbb.co.yu.



+2 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 02:35 - pre 219 meseci
pokusaj da posle svakog malloc-a provjeris da li ti je vratio null pointer
IRC is just multiplayer notepad.
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
81.93.74.*



+2 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 14:14 - pre 219 meseci
da li stvarno postoji fajl pera.txt u direktoriju?

Evo primjera funkcije koja provjerava da li postoji fajl ili direktorij:

Code:


BOOL Exist (char *szFilePath)
{
  if(strchr(szFilePath, '*') || strchr(szFilePath, '?'))
  return Exist_A (szFilePath);
  return Exist_B (szFilePath);
}

BOOL Exist_A (char *szFilePath)
{
  WIN32_FIND_DATA W32FindData;
  HANDLE rc;
  rc = FindFirstFile(szFilePath, &W32FindData);
  if(rc == INVALID_HANDLE_VALUE) return FALSE;
  FindClose(rc);
  return TRUE;
}

BOOL Exist_B (char *szFilePath)
{
  DWORD ret;
  ret = GetFileAttributes(szFilePath);
  if (ret != 0xffffffff) return TRUE;
  return FALSE;
}




 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.dsl.siol.net.

Sajt: misc.comli.com


Profil

icon Re: ubite me ako sam normalan29.03.2006. u 15:53 - pre 219 meseci
@stargazer: Mali savet, izbegavaj nazive kao sto su fAjl, napravice ti haos
i oduzeti mnogo vremena. Na primer pFile je mnogo jasnije i bice ti jasnije
i ako se posle x meseci vratis na neki deo koda gde si ga koristio.

[Ovu poruku je menjao reject dana 29.03.2006. u 16:55 GMT+1]
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 17:34 - pre 219 meseci
Citat:

da li stvarno postoji fajl pera.txt u direktoriju?


Toliko nenormalan nisam....

Citat:

@stargazer: Mali savet, izbegavaj nazive kao sto su fAjl, napravice ti haos
i oduzeti mnogo vremena. Na primer pFile je mnogo jasnije i bice ti jasnije
i ako se posle x meseci vratis na neki deo koda gde si ga koristio.


Hvala na savetu, ali kod koji sam dao gore je samo privremen, i služi za isporbavanje čitanja iz fajla.

Citat:

pokusaj da posle svakog malloc-a provjeris da li ti je vratio null pointer


malloc je u redu.

Hvala svima na pokušaju, ali problem je mnogo ozbiljniji. Sinoć sam ovo postovao i otišao na spavanje besan.




Danas imam još neke informacije o problemu:

Naime, kada ga debugujem, izvršavanje programa se zaustavlja na liniji spomenutoj gore. Kada program pokrenem normalno, van MSVS-a, dobijem sledeću RUNTIME grešku :

Debug assertion failed!
file : fseek.c
Line: 149
expressions : str != NULL

i tu me je jutros zakucao.
Probao sam i sa new/delete, isto izbaci kao i sa malloc/free.

Takođe sam probao i sa LocalAlloc/LocalFree kombinacijom. Tu mi za RUNTIME izbaci isto, ali u MSVS-u dobijem sledeću poruku :

User breakpoint
Unhandled exception at address ...


tako da ,
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

kurt.hectic
Kurt Hectic

Član broj: 66049
Poruke: 25
*.etf.bg.ac.yu.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:12 - pre 219 meseci
Evo par mogucih problema pa ti vidi da li pomaze.
- ne proveravas sta je vratio malloc
- ne proveravas sta je vratio fopen ni fseek
- oslobadjas 'dir' (free(dir)) dok ga 'fAjl' mozda jos koristi
- ftell vraca long a ti pamtis u int
- fgetc vraca int, to pamtis u char, kog uporedjujes onda sa intom). ovaj uslov nikad nije ispunjen.
 
Odgovor na temu

zkaiser
- -

Član broj: 19545
Poruke: 262
*.dyn.ravangrad.net.



+1 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:21 - pre 219 meseci
pise se ubijte me, ;)
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.dsl.pipex.com.



+4 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:26 - pre 219 meseci
char * Bafer = (char *)malloc((size + 1) * sizeof(char));
int i=0;
while ((*(Bafer+i) = fgetc(fAjl)) != EOF) i++;


Obrati pazhnju na boldovan deo. Sa tim ce raditi.

Ti uchitavash iz fajla jedan vishe bajt od onog shto si alocirao (tj. upisujesh i jedno 0xff PREKO granice bafera)
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:53 - pre 219 meseci
Citat:
pise se ubijte me, ;)


Što volim ove likove...

Evo lepote :
Stavio sam GlobalAlloc i proveru fajla i pod MSVS-om izbacuje User breakpoint pri pozivu GlobalFree. Ali više ne izbacuje RUNTIME greške.
Naravno, bilo je problema sa postojanjem pera.txt fajla. Radi se o tome što pod MSVS-om GetCurrentDirectory vraća ProjectDir, gde sam napravio fajl, a ne ProjectDir\Debug gde stoji program. Tu je išla RUNTIME greška, jer pre toga nisam proveravao da li je fAjl pokazivač dobar.
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.broadband.blic.net.



+2 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 22:16 - pre 219 meseci
Citat:
Toliko nenormalan nisam....


Ipak ...

Nisam ti dzabe poslao kod da provjeris da li fajl ili dir postoji.

 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 22:27 - pre 219 meseci
Da, nepristojni ja, nisam ti zahvalio za to.

Ali i dalje imam grešku u debug modu, pod MSVS-om.
Šta ću sa time?
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.beotel.net.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:19 - pre 219 meseci
A da li znas kog je tipa taj file? Mislim..dali je tekstelni ili binarni? Ako je tekstualni, onda se CR LF racunaju kao jedan ili dva karaktera u zavisnosti od moda, pa dobijas pogresnu duzinu. Ukratko... fajlove otvaraj sa "rb" ili "rt" i uvek ces biti siguran u kom modu ces procitati file.

Code:

...
FILE* f = fopen(dir, "rb");
fseek(f, 0, SEEK_END);
int size = ftell(f);
fseek(f,0,SEEK_SET);

chat* buffer = (char*)calloc(size+1, sizeof(char)); //Allocates an array in memory with elements initialized to 0
fread(buffer, sizeof(char), size, f);

fclose(f);

// uradi nesto sa bufferom

free(buffer);


 
Odgovor na temu

z@re
Zarko Bulatovic
Split

Član broj: 29849
Poruke: 443
*.cmu.carnet.hr.



+25 Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:46 - pre 219 meseci
Sad sam upravo taj tvoj kod pokrenuo u DevCpp-u, s dvije modifikacije : naravno, nije unutar switch petlje, i nema MessageBox poziva. Sve prolazi ok, na kraju sam samo sa puts funkcijom ispisao sadrzaj "Bafer"-a, u kojem je cijeli pera.txt file iz tekuceg direktorija. Dakle, ovo sve radi, nema nigdje greske. Jedino je mozda neka caka do MessageBox-a.

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:57 - pre 219 meseci
fajl te tekstualni i probao sam i sa "rt", ali isto

Evo šta izbaci kao grešku pri oslobađanju bafera sa GlobalFree :

Unhandled exception at 0x7c901230 in Task Doer.exe: User breakpoint.

Nebuloza čista i napominjem da ne prijavljuje grešku van MSVS-a!

[Ovu poruku je menjao stargazer dana 30.03.2006. u 01:00 GMT+1]
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

z@re
Zarko Bulatovic
Split

Član broj: 29849
Poruke: 443
*.cmu.carnet.hr.



+25 Profil

icon Re: ubite me ako sam normalan30.03.2006. u 00:01 - pre 219 meseci
Dev-C++ v4.9.9.1. Windows project. Includani windows.h, stdlib.h i stdio.h.

Code:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    char *dir, *Bafer; int size, i=0; FILE *fAjl;
    switch (message)                  
    {
        case WM_CREATE:
             {
                 dir = (char *)malloc((MAX_PATH+20) * sizeof(char));         
                 GetCurrentDirectory(MAX_PATH, dir);
                 strcat(dir, "\\pera.txt");
                 fAjl = fopen(dir, "r");              
                 free(dir);
                 fseek(fAjl, 0, SEEK_END);
                 size = ftell(fAjl);
                 rewind(fAjl);           
                 Bafer = (char *)malloc(size * sizeof(char));
                 while ((*(Bafer+i) = fgetc(fAjl)) != EOF) i++;
                 fclose(fAjl);
                 MessageBox(hwnd,Bafer,"Procitao",MB_OK);
                 free(Bafer);  
                 break;
              }
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
        default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


Tvoj kod ubacen u handler forme pri WM_CREATE eventu. Samo deklaracije varijabli izbacene van switch statementa. Sve radi najnormalnije, tj. odma prilikom podizanja programa prikaze MessageBox naziva "Procitao", u kojem je ispisan sadrzaj ove pera.txt datoteke iz tekuceg direktorija.

Dakle ne znam sta da napravis osim da izbacis deklaracije negdje direktno u funkciju (ovo po zdravoj logici uopce ne bi trebalo pomoc, jer meni radi i sa deklaracijama unutar case-a). Ili batalis to smece od Visual C++-a.

A mozda si i negdje prije u programu krivo mallocirao memoriju ili nesto tog stila, pa sad imas sranja radi toga. Provjeri sve skupa.

[Ovu poruku je menjao z@re dana 30.03.2006. u 01:04 GMT+1]

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.beotel.net.



Profil

icon Re: ubite me ako sam normalan30.03.2006. u 01:03 - pre 219 meseci
A koji MSVC koristis? Ako je pitanju MSVC 6 onda instaliraj service pack 6 za njega. Ume da pravi gluposti ako ga ne "servisiras".

yooyo
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: ubite me ako sam normalan30.03.2006. u 01:10 - pre 219 meseci
Pft...

Taj kod sam pokrenuo pod VS.2003.

Kod puca tamo gde si rekao, jer imash memory stomp, ochigledan - za fajl sadrzhaja recimo "1234567" tvoja petlja upisuje 8 bajtova u bafer velichine 7 bajtova (pogledaj memory window ako ne verujesh).

(size+1) radi posao (kad jednom uchitash fajl).... to je i yooyo napisao u onom snipetu.
Ako ti se ne svidja (size+1) onda promeni switch petlju da ne upisuje jedan element vishe nego shto treba

Ne znam oko chega je tolika rasprava, posebno ne razumem izjave tipa "VisualC++ smece"

[Ovu poruku je menjao NastyBoy dana 30.03.2006. u 02:10 GMT+1]
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: ubite me ako sam normalan30.03.2006. u 10:56 - pre 219 meseci
da, to je rešilo problem

nisam u startu stavio size+1, jer sam tako video u primeru dokumentacije ftell funkcije na :
http://www.cplusplus.com/ref/
a posle mi uopšte nije palo na pamet da proverim da li je do toga

u nekom postu ovde sam stavio čoveku čak da tako treba, posle nisam mogao da nađem taj post da ispravim ( bolje )

hvala svima u svakom slučaju


[Ovu poruku je menjao stargazer dana 30.03.2006. u 11:56 GMT+1]
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

[es] :: C/C++ programiranje :: ubite me ako sam normalan

[ Pregleda: 4125 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.