【发布时间】:2021-10-28 12:26:24
【问题描述】:
我正在尝试使用 C++ 将二维数组传递给函数。作为其中的一部分,当我将空间分配给 3*2 矩阵时,在执行过程中,我无法弄清楚为什么编译器会抛出“终止调用递归”。
任何帮助将不胜感激。
编辑:这在在线编译器中工作得很好。 (我的系统使用了 gcc 编译器 -> Windows 上的 MingW)
void printMat(int **arr, int m, int n)
{
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
cout<<arr[i][j]<<" ";
}
int main()
{
int m=3, n=2;
int **arr;
arr = new int *[m];
for(int i=0; i<m; i++)
{
arr[i] = new int[n];
for(int j=0; j<m; j++)
{
arr[i][j]=i;
cout<<arr[i][j]<<" ";
}
}
cout<<"Reached"<<endl;
printMat(arr, m, n);
return 0;
}
【问题讨论】:
-
首先请注意,您的错误不会发生在编译器中,而是发生在您的程序中。至于问题,你的程序崩溃了。然后在退出时再次崩溃。使用 调试器 查找崩溃的位置。
-
main()中的内部循环具有未定义的行为,因为结束条件是j < m而不是j < n。因此它会修改每个arr[i]的n元素末尾之后的元素