problem z malloc

Apr 04, 2006 4 Replies

Witam. Zwracam sie do Was z problemem dotyczacym uzycia funkcji malloc w GCC. W funkcji main() wywoluje dwie napisane przeze mnie funkcje dla ktorych parametrem wejsciowym jest wskaznik do lancucha znakow uchar. Jesli lancuch ten mam zdefiniowany statycznie (linie zaremowane w listingu) program dziala bezblednie. Jesli zadeklaruje go z uzyciem malloc() blokuje sie po kilku minutach. Poniewaz parametrem wejsciowym kazdej z tych funkcji jest wskaznik do lancucha znakow, przed kazdym wywolaniem tych funkcji odtwarzalem go z zapamietanego bufora ale to niestety nie pomoglo. Moze zasugerujecie mi miejsce gdzie popelniam blad? Z gory dziekuje za pomoc.



#include <stdlib.h>



FLAGS funkcja1(uchar *ptr); void funkcja2(uchar *ptr1);


int main (void) { uchar *vPtr=0, *vPtrBuf=0; // uchar masa[25];



vPtr=(uchar*)malloc(25); vPtrBuf=vPtr;



while(1) { vPtr = vPtrBuf; if( funkcja1( vPtr ) == YES ) // if( funkcja1( masa ) == YES ) { vPtr = vPtrBuf; funkcja2( vPtr ); // funkcja2( masa ); } // if( status == YES ) } // while(1)



return (0); } // main()



Jacek M.



Te twoje funkcje przypadkiem nie zmieniaja lancucha ? I na pewno nie wyskocza poza 25 znakow ?

Bo jak wyskocza to moze byc istotne co zmienia.

J.

Dzieki. Prawdopodobnie tutaj lezy problem. Funkcji w ktorych mam obszary RAM zdefiniowane za pomoca malloc w moim programie jest sporo. Musze sprawdzic czy nie przekraczam zadelkarowanych wielkosci. Troche sporo roboty ale to jest chyba dobry pomysl na ktory sam nie wpadlem wczesniej. Jeszcze raz dzieki.

Jacek M.

No coz - wersja "objawowa" - zaalokowac troche wiecej pamieci, wpisac cos poza spodziewany obszar, sprawdzac czy po wywolaniu funkcji nadal jest tam to samo..

J.

I tak bede musial zrobic. Chcialem tego uniknac z powodu ilosci wywolan funkcji malloc ale coz, najwyrazniej nie ma innego wyjscia. Dzieki za pomoc i goraco pozdrawiam.

Jacek M.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required