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

ubite me ako sam normalan

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

[ Pregleda: 1506 | Odgovora: 17 ]

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

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
28.03.2006. u 22:39 

peka
Beograd

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



Profil

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

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 133
81.93.74.*



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 14:14
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;
}




29.03.2006. u 14:14 

reject
Ivan Pesic
Bgd

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

Sajt: www.filmnoirthemovie.com


Profil

icon Re: ubite me ako sam normalan29.03.2006. u 15:53
@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.
29.03.2006. u 15:53 

stargazer
bgd

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 17:34
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
29.03.2006. u 17:34 

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
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.
29.03.2006. u 18:12 

zkaiser
- -

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:21
pise se ubijte me, ;)
29.03.2006. u 18:21 

NastyBoy
Bojan Nastic
UK

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:26
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)
29.03.2006. u 18:26 

stargazer
bgd

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 18:53
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
29.03.2006. u 18:53 

ljube
Ljubiša Knežević
Banjaluka

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



Profil

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


Ipak ...

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

29.03.2006. u 22:16 

stargazer
bgd

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 22:27
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
29.03.2006. u 22:27 

yooyo
Centroid / Technical director

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:19
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);


29.03.2006. u 23:19 

z@re
Zarko Bulatovic
Split, Spinut

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

Sajt: www.freebsd.org


Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:46
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.
[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


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.
29.03.2006. u 23:46 

stargazer
bgd

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



Profil

icon Re: ubite me ako sam normalan29.03.2006. u 23:57
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
29.03.2006. u 23:57 

z@re
Zarko Bulatovic
Split, Spinut

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

Sajt: www.freebsd.org


Profil

icon Re: ubite me ako sam normalan30.03.2006. u 00:01
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]
[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


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.
30.03.2006. u 00:01 

yooyo
Centroid / Technical director

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



Profil

icon Re: ubite me ako sam normalan30.03.2006. u 01:03
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
30.03.2006. u 01:03 

NastyBoy
Bojan Nastic
UK

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



Profil

icon Re: ubite me ako sam normalan30.03.2006. u 01:10
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]
30.03.2006. u 01:10 

stargazer
bgd

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



Profil

icon Re: ubite me ako sam normalan30.03.2006. u 10:56
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
30.03.2006. u 10:56 

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

[ Pregleda: 1506 | Odgovora: 17 ]

Postavi temu Odgovori

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