Используя динамические многомерные массивы в C++

Я не уверен относительно того, что это, Вы пытаетесь достигнуть. Но возможно можно использовать это:

$var =~ s/^start/foo/;
$var =~ s/end$/bar/;

Т.е. просто оставляют середину в покое и заменяют запуск и конец.

5
задан T.E.D. 24 September 2009 в 13:45
поделиться

6 ответов

Чтобы это сделать .. Вам действительно нужно сделать это:

int **lsquare = new int*[n];

for (int i=0; i<n; ++i)
    lquare[i] = new int[n];

for (int i=0; i<n; i++)
    for (int j=0; j<n; j++)
        cin >> lsquare[i][j];

blocktest(lsquare,n,sum);

Лучшая система:

int *lsquare = new int[n*n];

for (int i=0; i<n; ++i)
    for (int j=0; j<n; ++j)
        cin >> lsquare[i + j*n];

blocktest(lsquare, n, sum);
7
ответ дан 14 December 2019 в 01:12
поделиться

Вы забыли выделить память для второго измерения матрицы.

int **lsquare;
lsquare = new int*[n];
for (int i=0; i<n; ++i){
  lsquare[i] = new int[n];
....}

никто не пишет

for (int i=0;i<=n-1;i++){...}

Вместо этого сделайте

for (int i=0; i<n; ++i){...}
2
ответ дан 14 December 2019 в 01:12
поделиться

У вас есть массив указателей в lsquare.

Вы можете просто сделать что-то вроде:

lsquare = new int[n * n];

Таким образом вы можете заполнить этот квадрат, но тогда тип будет:

int *lsquare
0
ответ дан 14 December 2019 в 01:12
поделиться

То, что вы фактически создаете массив массивов. Вам нужно не только выделить массив массивов с помощью new , но также вы должны выделить все массивы n . Вам нужно, чтобы внешний цикл вашего вложенного цикла for выделял каждый из n подмассивов.

lsquare = new int*[n];
for (int i=0;i<=n-1;i++) 
{
    lsquare[i] = new int[n];
    for (int j = 0;j<=n-1;j++)
    {
    //...
0
ответ дан 14 December 2019 в 01:12
поделиться

Вы создали указатель-указатель, который можно использовать в качестве матрицы, выделили для него одну строку, а затем продолжили действовать так, как будто вы выделили всю матрицу n * n. Вы действительно получите segfault, если запустите это.

Вам нужно выделить достаточно места для n * n элементов, а не только n из них.

Менее подверженным ошибкам решением может быть использование std :: vector of std :: vectors.

0
ответ дан 14 December 2019 в 01:12
поделиться

Вы также необходимо выделить место для второго измерения, добавьте это после выделения lsquare:

for(int i = 0; i < n; ++i)
{
    lsquare[i] = new int[n];
}
0
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: