Я не уверен относительно того, что это, Вы пытаетесь достигнуть. Но возможно можно использовать это:
$var =~ s/^start/foo/;
$var =~ s/end$/bar/;
Т.е. просто оставляют середину в покое и заменяют запуск и конец.
Чтобы это сделать .. Вам действительно нужно сделать это:
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);
Вы забыли выделить память для второго измерения матрицы.
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){...}
У вас есть массив указателей в lsquare.
Вы можете просто сделать что-то вроде:
lsquare = new int[n * n];
Таким образом вы можете заполнить этот квадрат, но тогда тип будет:
int *lsquare
То, что вы фактически создаете массив массивов. Вам нужно не только выделить массив массивов с помощью 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++)
{
//...
Вы создали указатель-указатель, который можно использовать в качестве матрицы, выделили для него одну строку, а затем продолжили действовать так, как будто вы выделили всю матрицу n * n. Вы действительно получите segfault, если запустите это.
Вам нужно выделить достаточно места для n * n элементов, а не только n из них.
Менее подверженным ошибкам решением может быть использование std :: vector of std :: vectors.
Вы также необходимо выделить место для второго измерения, добавьте это после выделения lsquare:
for(int i = 0; i < n; ++i)
{
lsquare[i] = new int[n];
}