WedX - журнал о программировании и компьютерных науках

C++ - динамический массив в 1D работает, то же самое в 2D не работает

У меня проблема с моим кодом. У меня есть некоторые данные для класса, nmax и mmax. Они определены в заголовке как

int nmax;
int mmax;

Затем у меня есть несколько массивов, определенных в заголовке как

double* Nline;
double** NMline;

а потом хотелось бы выделить их в основной программе. Во-первых, я присваиваю nmax и max значение из ввода

nmax = nmax_in;
mmax = mmax_in;

а затем я выделяю массивы

Nline = new double [nmax];
NMline = new double [nmax][mmax];

Проблема в том, что массив 1D распределяется таким образом. А вот 2D массива нет - компилятор пишет: выражение должно иметь постоянное значение

Почему NLine была выделена, а NMline нет?

Я понимаю, но я не знаю, как это сделать в моей программе и почему для 1D-массива это распределение нормально. Большое спасибо за вашу помощь

17.09.2013

  • Вы не можете выделить 2D-массив таким образом. Ищите об этом здесь, вы найдете ответ. 17.09.2013

Ответы:


1
double** NMline;

объявит указатель на массив указателей, он не будет объявлять 2D-массив. Сначала нужно выделить данные для массива указателей (указателей на строки):

NMline = new double*[nmax];

а затем инициализировать каждую строку:

for(int i = 0; i < nmax; i++)
       NMline[i] = new double[mmax];

Не забудьте сначала удалить все строки, а затем саму NMline:

for(int i = 0; i < nmax; i++)
       delete [] NMline[i];
delete [] NMline;
17.09.2013
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]