发布网友 发布时间:2022-04-24 09:39
共2个回答
热心网友 时间:2022-06-18 14:23
new是C++里面动态申请堆内存的函数
如果是C语言要用malloc,包含在头文件stdlib中
栈内存大概就占两三M,你一个double类型的数据占8个字节,361X361X8字节早就超过栈内存了
我给你改了下,指针数组从堆上分配内存,但也不能超过你机子的内存量(一般2G)
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#define e 2.718281828
#define s 10000
void main()
{
double *a[s] = { NULL };
int i,j;
for (i=0; i<s; i++)
{
a[i] = (double *) malloc (s * sizeof(double));
}
for(i=0;i<s;i++)
{
for(j=0;j<s;j++)
{
//printf("i=%d,j=%d\n",i,j);
if(i==j) a[j][j]=(1.-0.024*(i+1))*sin(0.2*(i+1))-0.*pow(e,(0.1/(i+1)));
else if(i==j+1) a[i][j]=0.16;
else if(i==j-1) a[i][j]=0.16;
else if(i==j+2) a[i][j]=-0.0;
else if(i==j-2) a[i][j]=-0.0;
else a[i][j]=0;
}
}
for(i=0;i<s;i++)
{
for(j=0;j<s;j++)
{
printf("a[%d][%d]=%f\n",i,j,a[i][j]);
}
}
}追问谢谢您,我需要行/列数501的二维数组,为什么把s改成501后编译有错误?程序中还需要在子程序中对数组进行处理,不知可不可以?我开始都是用3*3的数组调试的可能因此漏掉了一些问题。。。请问您在百度上方便还是QQ上方便?我刚看c语言书不到一周,可能以后还有一些不懂之处想请教您,先谢谢您了!
追答你先将代码复制,关闭编译平台,重新打开编译平台,黏贴,改成501就OK了
原因是,申请内存量大,你上一次代码还在占用系统,也就还在运行,导致改变这次无法进行
扣扣1 2 1 5 9 0 6 8 0
热心网友 时间:2022-06-18 14:23
你使用的栈空间 栈控件有大小的 你用NEW吧 NEW用的是堆 不过也是有大小的 太大了内存也没那么大会报错追问能说详细点儿吗?NEW是什么?新版本VC吗?