Member 13826764 Ответов: 2

Как работает malloc в C


Основной синтаксис malloc выглядит следующим образом
а = (инт*) Танос(Н * оператор sizeof(тип int);
Я хотел спросить, что на самом деле означают эти Инты и почему у нас есть *
и еще одна вещь заключается в том, чтобы сделать динамическое распределение 2d-массива, которое мы должны использовать
а = (тип int**) Танос(Н * оператор sizeof(тип int*);
почему у нас здесь есть 2 *

Что я уже пробовал:

Глядя на разные сайты, я даже пытался удалить их из некоторых кодов, но они все равно работали

2 Ответов

Рейтинг:
12

Rick York

int * означает указатель на целое число. Звездочка обозначает синтаксис указателя. В объявлении, которое является указателем на тип. В операторе это означает, что указатель разыменован, поэтому вы получаете значение, на которое он указывает.

Двойная звездочка означает указатель на указатель. Ваше выражение - это только часть работы, необходимой для динамического выделения 2D-массива. Это выделило пространство для указателей строк, и теперь вам нужно выделить сами данные. Обычно это делается так :

int ** array = (int **)calloc( n, sizeof(int *) );
for( i = 0; i < n; ++n )
{
   array[i] = calloc( n, sizeof( int ) );
}
Это позволит выделить n на n двумерный массив целых чисел. Я использую calloc, потому что он автоматически обнуляет память для вас. Вам придется отменить операции, чтобы полностью освободить память. Это означает циклический просмотр каждого из них для освобождения данных строк, а затем один вызов для освобождения указателей строк :
for( i = 0; i < n; ++n )
{
   free( array[i] );
}
free( array );


CPallini

5.

Рейтинг:
0

KarstenK

malloc выделяет блок памяти с размером запроса, который он получает от системы. Возвращаемое значение-это указатель на память. Поймите это как отправную точку фрагмента памяти. Ваш код должен интепретировать эту память так, как вы хотите.

Я предпочитаю создавать новые и удалять их, когда это возможно.

Вы можете использовать отладчик и шаг в Маллок чтобы увидеть его внутреннюю работу. Один хорошая статья о Танос.