【发布时间】:2013-09-28 19:35:24
【问题描述】:
你能帮帮我吗,我有问题。这是转置矩阵的程序。当行数或列数等于 357 或更大时,程序不起作用(定义 MAX_n 357,定义 MAX_m 357)。小于357时程序正常工作。
#include <stdio.h>
#include <stdlib.h>
#define MAX_m 357
#define MAX_n 357
void main()
{
int a[MAX_m][MAX_n],b[MAX_m][MAX_n];
int r=0,j,i;
printf("\nProgram to transpose matrix\n");
for(i=0;i<MAX_m;i++)
{
for(j=0;j<MAX_n;j++)
{
r=rand();
a[i][j]=r;
}
}
printf("\nMatrix A: ");
for(i=0;i<MAX_m;i++)
{
printf("\n");
for(j=0;j<MAX_n;j++)
{
printf(" ");
printf("%d",a[i][j]);
}
}
for(i=0;i<MAX_m;i++)
{
for(j=0;j<MAX_n;j++)
{
b[i][j]=a[j][i];
}
}
printf("\nResultant Matrix: ");
for(i=0;i<MAX_m;i++)
{
printf("\n");
for(j=0;j<MAX_n;j++)
{
printf(" ");
printf("%d",b[i][j]);
}
}
printf("\n");
return(0);
}
【问题讨论】:
-
"357 或更大的程序不起作用" - 它是如何失败的? - 崩溃、挂起、不正确的输出,还有什么?
-
a正在堆栈分配。是否有可能您使用了太多堆栈? 357 * 357 * sizeof(int) 大约是 1/2 兆。你动态分配a会发生什么? -
更糟糕的是,他为
a和b分配了两次空间,使用了将近一兆字节的堆栈。告诉我们当您将a和b声明为全局变量时会发生什么。 -
当程序即将启动时,消息“应用程序停止工作”......我认为问题是堆栈溢出,我不知道如何解决它。我需要大矩阵 1024*1024。
-
我很好奇 - 你使用的是什么操作系统?
标签: c matrix c-preprocessor transpose