我正在制作一个C ++程序,用于检查给定的aray是否为latin square。我需要使用一个存储给定拉丁方的动态多维数组。但我不能将数组传递给执行检查的函数...
目前我有这样的代码来调用函数:
int squaretest(int **p, int n, int sum) {
//some code
};
此代码用于创建数组:
int main() {
//some code. n - length of one row, sum - sum of elements in one row.
int a;
int **lsquare;
lsquare = new int*[n];
for (int i=0;i<=n-1;i++) for (int j=0;j<=n-1;j++) {
cin >>a;
lsquare[i][j] = a;
}
blocktest(lsquare,n,sum);
//some code
};
代码编译(我正在使用Geany IDE和G ++编译器)但是当我在终端中运行它时,在第一次输入后,必须存储在块[0] [0]中我得到分段错误< / em>错误。我的代码有什么问题,什么是正确的溶剂?
答案 0 :(得分:7)
能够做到这一点..你实际上需要这样做:
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);
答案 1 :(得分:2)
你忘了为矩阵的第二维分配内存。
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 :(得分:0)
你在lsquare中有一个指针数组。
您可能只想做以下事情:
lsquare = new int[n * n];
然后你可以填写这个方块,但那个类型是:
int *lsquare
答案 3 :(得分:0)
实际上是在创建一个数组数组。您不仅需要使用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++)
{
//...
答案 4 :(得分:0)
你自己做了一个指针指针,可以用作矩阵,为它分配一行,然后就像你分配了一个完整的n * n矩阵一样。如果你运行它,你确实会遇到一个段错误。
你需要为n * n个元素分配足够的空间,而不仅仅是n个元素。
不易出错的解决方案可能是使用std :: vector std :: vectors。
答案 5 :(得分:0)
你必须为第二个维度分配空间,在分配lsquare后添加它:
for(int i = 0; i < n; ++i)
{
lsquare[i] = new int[n];
}