c语言-二维数组大小问题......

问题描述

二维数组大小问题......

int a[100][100] = { 0 }, b[100] = {0}, n, m, j, i, min;
printf("输入行和列: ");
scanf_s("%d%d", &n, &m);
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
scanf_s("%d", &a[i][j]);
for (i = 1; i <= m; i++)
{
min = a[1][i];
for (j = 1; j <= n; j++)
{

        if (a[j][i] < min) min = a[j][i];
    }
    b[i] = min;
}
for (i = 1; i <= m; i++)
    printf("%d", b[i]);//这个程序求二维数组每一列的最小值,但是我把a[100][100]改成a[1000][1000]
    把b[100]改成b[1000]的话,这个程序就不能运行了,运行时会提示出现了某个错误,怎么回事啊?

解决方案

stack的大小是有限的,改用malloc分配数组空间。

解决方案二:

数组太大,栈溢出了。

解决方案三:

可以在堆里分配,试试看咯

解决方案四:

数组太大,可以考虑将数组开在全局变量那里,算法竞赛书上有这样的例题

解决方案五:

1、数组下标是从0开始,例如int a[3];其包含元素为 a[0],a[1],a[2],不包含a[3],如果您使用a[3]就会产生内存溢出
2、在操作数据时,循环一般也是从0开始,如:for(int i=0;i<3;i++){.....};此次循环中不能让i=3,否则就出现a[3],会产生内存溢出
3、对于上面几位的回答,说数组太大这个问题,表示不赞同。
4、关于你说的100改成1000就有问题,如果你把1、2两点看明白,修改了,如果还有问题,请重新贴源码,有空帮您看看

解决方案六:

a[100][100],表示数组的数据大小为100 * 100<65535,也即64k,由于你编写的是默认的dos下的小模式程序,数据不能超过64k,即65535,
a[1000][1000] 它的数据大水为1000 * 1000 达到了一百万,显然大于64k,在dos模式下显然不能运行,如果在windows的平坦内存flat模式下
是可以使用4GB内存的,那样就没有问题了,如果你一定要用如此大的数据,则可以考虑用windows编程模块加载,可用vc++,或windows下的C组件。

解决方案七:

1、正如荒村归来所说,数组遍历中下标的控制应该是有点问题。
2、要是数组太大导致栈溢出的话,应该会提示segment fault错误。
如果遇到这种错误,可以使用 ulimit -a 查看stack设置多大,以kbytes为单位;
也可以通过ulimit -s size 修改栈大小的设置,比如 ulimit -s 102400,设置为100M
希望对你有所帮助。

解决方案八:

一般这类似的问题都是栈溢出了。。。

解决方案九:

运行时会提示某个错误???运行时直接就提示了栈溢出:
有未经处理的异常: 0xC00000FD: Stack overflow

时间: 2024-05-20 03:00:33

c语言-二维数组大小问题......的相关文章

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操

c语言-C语言二维数组下标越界--却能给越界的下标赋值 和输出

问题描述 C语言二维数组下标越界--却能给越界的下标赋值 和输出 编译器:dev-c++ int iArray[3][4]; iArray[3][4]=1000; printf("%d",iArray[3][4]); 改变 iArray[3][4]的值为1000 输出的结果仍然为1000 请问这个是什么原因呢? 我是直接给越界的下标进行了赋值 以前以为只要是下标越界了 输出的都是无意义的数字 其实那是因为没有给越界的下标赋值 对吗 越界的下标为什么还能正常使用呀 解决方案 使用越界的数

数组 指针-c语言二维数组的指针问题

问题描述 c语言二维数组的指针问题 在WinTC下运行如下代码 #include void main() { char a1[][5]={"ab","cd","ef","ghi","sfs"}; printf("%sn",*(a1+3)); //语句1 printf("%cn",**(a1+3)); //语句2 } 运行结果为: ghi g 但如果将上述语句1中的%s

编程c语言-C语言二维数组问题 求解

问题描述 C语言二维数组问题 求解 解决方案 bool foo() { int a[100][100]; int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",a[i][j]); } } int sum = 0; int sum1 = 0; for (i = 0; i < n; i++) sum += a[i][0]; for (j = 0; j < n; j++) { sum1 = 0; for (

C语言二维数组输出段错误

问题描述 C语言二维数组输出段错误 #include #define SIZEWIDTH 10 //分块宽度 #define SIZEHEIGHT 10 //分块高度 void setzero_array(int arr[SIZEWIDTH][SIZEHEIGHT])//数组初始化函数, { int i,j; for(i;i<SIZEWIDTH;i++) for(j=0;j<SIZEHEIGHT;j++) arr[i][j]=0; } void show_array(int arr[SIZEW

c语言-java的二维数组和C语言二维数组的储存结构有什么区别?

问题描述 java的二维数组和C语言二维数组的储存结构有什么区别? java的二维数组和C语言二维数组的储存结构有什么区别?,数据结构有什么区别吗?有人说java的数组在内存中存储不是连续的,, 解决方案 java二维数组的存储在内存中不一定连续.二维数组是一维的一维,也就是树形结构. 解决方案二: 个人认为是连续的,要支持随机访问,当然如果内存真的不是连续的,那就是vm的事情了 解决方案三: C语言是连续的,Java应该也是连续的吧,这个问题还真没深究过.

C语言二维数组指针问题

问题描述 C语言二维数组指针问题 如下两个代码,第一个代码会停止运行,而第二个能得出正确结果...这两个代码的不同之处不应该是等价的吗?为什么会造成这种完全相反的结果? #include<stdio.h> void main() { void ave(float *p,int m); float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}}; ave(*a,12); } void ave(float *p,int m) { float

[总结]C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9 int a[2][3] = {1,2,3,4,5,6}; 10 print(a); 11 return 0

语言二维数组-C语言编程中二维数组以及递归函数问题

问题描述 C语言编程中二维数组以及递归函数问题 有编号分别为0,1,2,3,4的5本书,准备分给5个人A,B,C,D,E,每个人阅读兴趣用一个二维数组加以描述,公式如下: 1 i喜欢j书 Like[i][j] = 0 i不喜欢j书 写一个程序,输出所有分书方案,让人人皆大欢喜.假定5个人对5本书的阅读兴趣如下图所示. 解决方案 答案 a 2 b 0 c 1 d 3 e 4 要程序先采纳 解决方案二: 大半夜的,干嘛递归呢 5个for循环妥妥的 int num=0; struct answer {