Меня очень смущают malloc () и calloc () на C

Я всегда программировал на Java, и, вероятно, поэтому меня это так смущает:

В Java я объявляю указатель:

int[] array

и инициализирую его или назначаю ему некоторую память :

int[] array = {0,1,0}
int[] array = new int[3]

Теперь в C все так запутанно. Сначала я думал, что это так же просто, как объявить его:

int array[]

и инициализировать его или назначить ему память:

int array[] = {0,1,0}
int array[] = malloc(3*sizeof(int))
int array[] = calloc(3,sizeof(int))

Если я не ошибаюсь, все вышеперечисленное эквивалентно Java-C, верно?

Затем, сегодня я встретил код, в котором нашел следующее:

pthread_t tid[MAX_OPS];

и несколько строк ниже, без какой-либо инициализации ...

pthread_create(&tid[0],NULL,mou_usuari,(void *) 0);

Удивительно (по крайней мере, для меня), код работает! По крайней мере, в Java это вернет красивое «NullPointerException»!

Итак, по порядку:

  1. Я прав со всеми «переводами» Java-C ?

  2. Почему этот код работает?

  3. Есть ли разница между использованием malloc (n * sizeof (int)) и calloc (n, sizeof (int)) ?

Заранее спасибо

27
задан bluehallu 14 April 2012 в 16:27
поделиться