neveen neveen Ответов: 1

Динамическое выделение памяти на языке C++


В чем разница между ними
-
double **a ;
    
a = new double *[M];

и
for (int i = 0; i < M; i++) {
a[i] = new double [N];} 


и как можно перевести его на язык Си

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

-----------------------------------

1 Ответов

Рейтинг:
4

Rick York

Первый выделяет массив указателей на двойники размера M и присваивает его a.
Второй загружает массив a с M массивами двойников размера N.

Двойная звездочка указывает на наличие двумерного массива двойников. Эти фрагменты кода на самом деле являются двумя шагами, участвующими в выделении 2D-массива.

new переводится как malloc или calloc на языке Си. Я предпочитаю Каллок. Также помните, что в C++ вы освобождаете объекты с помощью delete, а в C используете free.

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