KOD ne radi u MS Visual C++ 2010 express

poruka: 4
|
čitano: 1.935
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
offline
KOD ne radi u MS Visual C++ 2010 express

Zašto mi funkcija malloc ne radi u MS Visual C++ 2010 express, isti kod bez problema radi u Borland C++ 5.2

 

p = (int*)malloc(m/2 *sizeof(int));
    if(p == NULL) {
       cout<< "Nema dovoljno memorije!";
       return 0;

 

Provjeru sam izvršio tako da sam za vrijednost m unio 0, međutim ne izvršava naredbu IF kao true.

a uzeo sam <stdlib.h> datoteku

Poruka je uređivana zadnji put sub 1.5.2010 16:10 (Floki).
 
0 0 hvala 0
17 godina
protjeran
offline
RE: KOD ne radi u MS Visual C++ 2010 express

Ovo je specifičan slučaj jer ako je m = 0 tada zapravo ne alociraš nikakvu memoriju. Ispiši si gdje pokazuje pokazivač prije i poslije poziva malloc pa će ti možda biti jasnije. Možda VS zapravo dealocira memoriju ako je vrijednost parametra jednaka nuli. Npr. to radi realloc.

17 godina
offline
KOD ne radi u MS Visual C++ 2010 express

Pokazivač mi pokazuje na različite adrese prije i poslije poziva funkcje malloc, čak i ako uzmem m=0, tj. funkcija alocira memoriju

U stvari funkcija radi, jer sam pomoću nje realizirao polje preko pokazivača, i koristio ga u programu

jedino ne može preko if(p==NULL) { . . . -  ući u taj blok naredbi- iako za vrijednost stavim m=0.

Borland nema taj problem

 

Dakle, koliko sam uspio skužiti gledajući adrese gdje pokazuju pokazivači prije i poslije poziva funkcije malloc u Visual C++ i Borlandu stvari stoje ovako kad za vrijednost uzmem m=0:

1. U Visual C++ pokazivač pokazuje na različitu adresu nakon poziva malloc funkcije uz vrijednost m=0 (dakle nije NULL)

2. U Borlandu pokazivač nakon poziva malloc funkcije uz vrijednost m=0 pokazuje 0.

Dakle Visual C++ realocira memoriju ako je vrijednost parametra jednaka 0, za razliku od Borlanda.

 

Hvala ti!Namigiva

Poruka je uređivana zadnji put sub 1.5.2010 22:47 (Floki).
 
0 0 hvala 0
16 godina
neaktivan
offline
KOD ne radi u MS Visual C++ 2010 express

Po meni, prvo sto bis trebao napraviti je izvaditi izraz unutar malloca u lokalnu varijablu i assertati da je vrijednost validna za malloc.

 

Takodjer, ne zaboravi da ce ti vrijednost pointera biti razlicita ne samo ovisno o compileru, nego i o levelu optimizacije (ie. seljacki receno, Debug/Release build). Sto znaci da ako malloc ne inicijalizira pointer, ne mozes ocekivati da ce pointer biti NULL, ako ga prethodno nisi rucno inicijalizirao na NULL.

Don't try to undertand if you weren't there... you felt different then - Marching off to War...
Poruka je uređivana zadnji put čet 6.5.2010 23:55 (Deus ex machina).
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice