przydzielanie pamieci w ansi C przyklad w c++

0

Dzień dobry,

mam takie pytanie, poniewaz chcialbym przeksztalcic kod z c++ na ansi C. Konkretniej chodzi o

lista **SL = new lista* [n];

chciałbym to przeksstałcic na ansi C. probowałem lista SL =(lista)malloc(nsizeof(int));

, ale progrma sie wysypuje. 
I jeszcze bym poprosil o zamiane tego 
```cpp
 nowy = new lista;

na ansi c
Moge wrzucic wiecej kodu jakby sie okazalo ze to nie jest przyczyna.

0

W zasadzie więcej kodu mogłoby być pomocne, aby dać Ci pewną odpowiedź. Pozwól jednak, że spróbuję zgadnąć.
Będę się odwoływał do tej linijki.

mac229 napisał(a):
 lista **SL =(lista**)malloc(n*sizeof(int*));

Strzelam, że nie doalokowujesz pamięci. Zważaj na to, że masz miejsce tylko na n wskaźników! Musisz doalokować pamięć dla każdego wskaźnika, aby wskazywał on na dostępną dla Ciebie pamięć! Do momentu, w którym nie wypełnisz tej tablicy wskaźników, adresami na dostępną przestrzeń - nie możesz z tablicy korzystać.
Pomyśl też nad pewną nieścisłością, potrzebujesz "lista*" a w sizeof wpisujesz "int*". Warto pomyśleć nad zadbanym kodem.
Mimo tego myślę, że bez większego fragmentu kodu ciężko będzie coś wymyślić.

1

operator new zeruje przydzielaną pamięć, a funkcja malloc() nie. dokładniejszym odpowiednikiem new będzie funkcja calloc().

0

po zamienieniu na calloc faktycznie juz sie nie wysypuje, póki co problem rozwiązany, ale być może jeszcze tu wróce ^^

0
Azarien napisał(a):

operator new zeruje przydzielaną pamięć, a funkcja malloc() nie. dokładniejszym odpowiednikiem new będzie funkcja calloc().

To nie jest prawda. new niczego nie musi zerować, jeżeli się mu nie każe. Żeby zrobił to dla typów wbudowanych trzeba napisać np. tak: int *ptr = new int();.

0

http://ideone.com/uNlXKI
int *ptr = new int; <- zeruje, tak samo jak -> int *ptr = new int();

0

@_wait_what, właśnie "może".
W vs dla pierwszej wartości wypisuje śmieci, tak więc jak już, to cie ideone w siusiaka zrobiło ^^

1 użytkowników online, w tym zalogowanych: 0, gości: 1