• 10 odgovora
  • 4.739 pregleda
Pomoc za tumacenje greske please 12.06.2005. u 12:35 · pre 260 meseci #1
Dakle na kraju izvrsenja programa izbacuje sledecu poruku:


Debug Assertion Failed!

Program: ...
File:dbgdel.cpp
Line:52

Expression:_BLOCK_TYPE_IS_VALID(p_Head->nBlockUse)


Da li neko zna uopste o cemu je otprilike rec ako izadje ovakva poruka.

Hvala.
Re: Pomoc za tumacenje greske please 13.06.2005. u 13:07 · pre 260 meseci #2
Rijec je zasigurno o dinamickoj dealokaciji memorije. Meni se to zato par puta dogodilo. Provjeri da li si sve ispravno dealocirao i provjerio da li su i alokacije uspjele.
Re: Pomoc za tumacenje greske please 16.06.2005. u 01:58 · pre 259 meseci #3
ajd postaj sve dijelove koda gdje inicializiras pointere, i sve djelove koda gdje ih oslobadjas.
Potpis

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.
Re: Pomoc za tumacenje greske please 16.06.2005. u 10:01 · pre 259 meseci #4
z@re, z@re... pa ti imas memory leak u potpisu:

Code:

#include <stdio.h>
#include <string.h>

void main()
{
 char *potpis;
 potpis = (char *)malloc(12);

 strcpy(potpis, "nema_potpisa");
 potpis[12] = '\0';

 printf("%s\n", potpis);
}


yooyo
Re: Pomoc za tumacenje greske please 16.06.2005. u 23:21 · pre 259 meseci #5
Program je dosta velik ali evo jedna cinjenica:

kada napisem npr:

Objekat ob;

i sada ga prosledim dalje u neki drugi objekat on izbaci tu gresku sa pocetka,ali ako napisem:

Objekat *ob=new Objekat;

i prosledim, greske na kraju nema.


Re: Pomoc za tumacenje greske please 23.06.2005. u 21:20 · pre 259 meseci #6
void main()
{
char *potpis; //ok
potpis = (char *)malloc(12);//ok moglo i bolje "(char *)malloc(12 * sizeof(char))"

strcpy(potpis, "nema_potpisa");//ok ! zauzima 12 byte-a(12 * sizeof(char))
potpis[12] = '\0';// ! hm prepisao si memorjiu koja nije tvoja jer
//kako si naveo: malloc(12) zauzeo si samo 12 bayta znaci da mozes
//dereferencirat samo od potpis[0] do potpis[11] jer indexi idu od 0 do
//n-1 zanci od 0 do 11; (neki puta moze proc a neki puta ti javi error
//ovisi kaj se nalazi na tom delu u memorii)
printf("%s\n", potpis);
free(potpis);// naravno ovo moze i ne mora jer sam OS(ovisi koji ) ti sam automatski
//oslobodi memoriu koju si zauzeo..
}
Re: Pomoc za tumacenje greske please 23.06.2005. u 23:40 · pre 259 meseci #7
Citat:
flx: Program je dosta velik ali evo jedna cinjenica:

kada napisem npr:

Objekat ob;

i sada ga prosledim dalje u neki drugi objekat on izbaci tu gresku sa pocetka,ali ako napisem:

Objekat *ob=new Objekat;

i prosledim, greske na kraju nema.


Pazi ne znam kakav je kod i sta ocekuju te metode kojima prosledjujes objekat, ali postoji veeeeelika razlika izmedju prosledjivanja pokazivaca i prosledjivanja celog objekta. Ako metoda ocekuje pokazivac, prosledi joj pokazivac ili adresu objekta, a nikako ceo objekat.

Ako je kod veliki ne moras da ostavljas ceo kod, vec ostavi tu 52. liniju koja pravi problem, i ostavi deklaraciju metode ako se slucajno poziva neka na toj liniji.


Citat:
overc:
free(potpis);// naravno ovo moze i ne mora jer sam OS(ovisi koji ) ti sam automatski
//oslobodi memoriu koju si zauzeo..
}


Uh, ne mora???? Mozda u ovom banalnom primeru i ne mora ali kad god rezervises memoriju moras je obavezno i osloboditi kada vise nije potrebna.
Potpis
I drink to make other people interesting.
Re: Pomoc za tumacenje greske please 24.06.2005. u 10:39 · pre 259 meseci #8
da naravno zaboravih reci da kada alociras memoriju sa malloc provjeri kaj je vratila :

potpis = (char *)malloc(12);

provjera:

if(potpis==NULL) ....ispisi nesto..


jer ako malloc nije mogao zauzeti nista...

strcpy(potpis, "nema_potpisa"); // tu ce ti nastat s*****


to naravno "ne moras" kada zauzimas samo 12 byte-a jer ce malloc proc


Marko Stankovic wrote:

Citat:
Uh, ne mora???? Mozda u ovom banalnom primeru i ne mora ali kad god rezervises memoriju moras je obavezno i osloboditi kada vise nije potrebna
.


u ovom primjeru ne mora (jer je premali) i pisao on free ili ne pisao memorija ce se osloboditi(prilikom izlaska) ,naravno da u vecim primjerima bi uvjek malloc() trebao ici u paru sa free()...

Re: Pomoc za tumacenje greske please 25.06.2005. u 10:26 · pre 259 meseci #9
Citat:
u ovom primjeru ne mora (jer je premali) i pisao on free ili ne pisao memorija ce se osloboditi(prilikom izlaska)...


Zavisi od OS-a... Windows, Linux, MacOS ili neki veci OS ce osloboditi memoriju, ali ako pises programe za male uredjaje (mikrokontrolere, telefone, ..) mozda i nece.

yooyo

Re: Pomoc za tumacenje greske please 25.06.2005. u 22:34 · pre 259 meseci #11
Citat:
overc:
u ovom primjeru ne mora (jer je premali) i pisao on free ili ne pisao memorija ce se osloboditi(prilikom izlaska) ,naravno da u vecim primjerima bi uvjek malloc() trebao ici u paru sa free()...


Ok, rekao sam da je primer prost i da nece biti problema, ali iskreno mislim da nikada ne treba razmisljati da li je kod prost ili nije vec uvek treba koristiti free() pa makar rezervises i jedan bajt, jer ko zna mozda ce nekad pozeleti da malo izmeni kod pa pusti neku beskonacnu petlju a zaboravi da nije ubacivao free() i posle x sekundi program zauzeo celu memoriju.
Potpis
I drink to make other people interesting.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme