Niestety, wiele odpowiedzi na to pytanie, w tym przyjętego jednego, są poprawne ale nie odpowiednikiem kodu PO za snippet. Pamiętaj, że operator new[]
wywołuje domyślny konstruktor dla każdego elementu tablicy. W przypadku typów POD, takich jak int
, które nie mają konstruktora, są one inicjowane domyślnie (read: zero-initialized, zobacz §8.5 ¶5-7 z The C++ Standard).
Właśnie wymieniane malloc
(przydzielić pamięci niezainicjowanej) dla calloc
(przeznaczyć wyzerowany pamięci), więc odpowiednik danego C++ fragmencie byłoby
#include <stdlib.h> /* atoi, calloc, free */
int main(int argc, char *argv[]) {
size_t size = atoi(argv[1]);
int *foo;
/* allocate zeroed(!) memory for our array */
foo = calloc(sizeof(*foo), size);
if (foo) {
/* do something with foo */
free(foo); /* release the memory */
}
return 0;
}
Sorry za zabicie ten stary pytanie, ale to po prostu nie czuję się prawo do wyjazdu bez komentarza (którego nie mam wymaganego przedstawiciela) ;-)
Wygląda na to, że zostałeś uszkodzony także przez C++;) – gbarry