求大牛相助!!!
#include<stdio.h>
int main()
{
int a[1000][1000],n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[j][i]=a[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d",a[j][i]);
}
printf("\n");
}
}
矩阵转置,怎么编译没错,执行就有问题???
[解决办法]
int a[1000][1000]分配的数组太大了
试试
int a[100][100]
[解决办法]
你用new试试
[解决办法]
int a[1000][1000]
要求分配4MB的栈空间。 默认的栈空间VisualStudio是1MB, Linux gcc大概是8k, 所以你的程序栈溢出。
你要用new来分配到 堆(“资源空间”)来解决问题。
[解决办法]
你也可以通过编译器来增加栈空间,但是那不是好的解决方式。
[解决办法]
#include<stdio.h>
int main()
{
int tmp; //添加一个中间变量
int a[1000][1000],n,i,j;
scanf("%d",&n); //矩阵的行数和列数
//初始化矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
//对矩阵进行转置操作
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{ //通过中间变量实现位置的转换
tmp = a[j][i];
a[j][i] = a[i][j];
a[i][j] = tmp;
}
}
//显示转置后的矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d",a[j][i]);
}
printf("\n");
}
return 0;
}
修改了一下你的代码,代码中数组确实不易申请太大的空间;你可以尝试通过动态申请空间,这样可以满足你输入的行数和列数。参考一下吧……
[解决办法]
在堆上分配数组大小
[解决办法]
貌似数据交换的语句
{
a[j][i]=a[i][j];
}也写错了[解决办法]
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。
如果还不行,就改用new或malloc
[解决办法]
是的,我在linux下测试能够通过,随意没修改你的数组长度。所以,你可以通过动态申请空间,想用多少就申请多少,并且还可以追加。
[解决办法]
不是,我实在linux下编译和执行的。在linux C下是使用malloc和free两个函数。增加空间是使用realloc函数。
[解决办法]
仅供参考
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19