| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:麻烦各位帮我看一下,运行时说程序错误,无法运行,是不是我漏掉那个地方了
只看楼主 加入收藏
珑晚衣
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-5
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:9 
麻烦各位帮我看一下,运行时说程序错误,无法运行,是不是我漏掉那个地方了


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define EPSILON 1.0E-12
#define N 200
#define M 100000
void main()
{
    int j,k,m,n;
    float h,t;
    double u[N+1][M+1];
    double f[N+1];

    printf("输入空间上的剖分数n\n");
    scanf("%d",&n);
    printf("输入时间上的剖分数m\n");
    scanf("%d",&m);

    h=1/float(n);   
    t=1/float(m);
    printf("h的值为%1.11f\n",h);
   
    printf("t的值为%1.11f\n",t);
   
    for(j=0;j<n+1;j++)
    {  
      u[j][0]=sin(180*j*h);
      f[j]=0;
    }
    for(k=1;k<m+1;k++)
    {
       u[0][k]=0; u[n][k]=0;
       for(j=1;j<n;j++)
       {
           u[j][k]=(1-2*t/(h*h))*u[j][k-1]+t/(h*h)*(u[j+1][k-1]+u[j-1][k-1])+t*f[j];
           f[j]=j*h*k*t;
       }
      
    }
    printf("输出最后每个插值点的解\n");
    for(k=1;k<m+1;k++)
        for(j=1;j<n;j++)
            printf("%2.10f\t",u[j][k]);

}
搜索更多相关主题的帖子: include double 空间 
2014-05-13 21:34
鱼儿海
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:77
专家分:194
注 册:2013-8-14
收藏
得分:0 
不知道,路过
2014-05-13 22:20
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
这两行:
    h=1/float(n);   
    t=1/float(m);
改为:
    h=1/(float)n;   
    t=1/(float)m;
可以编译,但是
#define N 200
#define M 100000
......
    double u[N+1][M+1];
分配了占用约153MB内存的数组,运行成问题。
2014-05-13 23:49
珑晚衣
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-5
收藏
得分:0 
回复 3 楼 top398
先谢谢你
但是求解的时候确实需要数组那么大的,是因为这个原因导致程序无法运行么?
2014-05-14 09:04
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 楼主 珑晚衣
你这个二维数组是有点大,用malloc试试看。

想抽苏烟了。
2014-05-14 09:12
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
该数组在运行栈上分配,一般的可执行文件不会有那么大的栈。改为 malloc 分配吧。
2014-05-14 09:29
珑晚衣
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-5
收藏
得分:0 
回复 6 楼 top398
看了看,不会用恩,能不能帮我把用malloc的地方转化一下
2014-05-15 13:47
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 

    double u[N+1][M+1];
 改为:
    double *u = ( double * )malloc( (N+1)*(M+1)* sizeof( double ) );
    if (u == NULL) {
        printf ("No enough memory\n"); // 分配内存失败
        return 1;
    }

main 函数结束前,应加一句:
free( u );
数组访问的写法可能要改一下。


[ 本帖最后由 top398 于 2014-5-15 14:11 编辑 ]
2014-05-15 13:53
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:30 
由于 malloc 分配的内存赋值给一个 double 指针,用下标方式存取指针指向的元素时,只能以一维方式存取,不能用 u[j][k] 的形式,因此应改为:
u[j * (M+1) + k]
的形式。
2014-05-15 14:09
珑晚衣
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-5
收藏
得分:0 
回复 9 楼 top398
谢谢了...
2014-05-16 11:18
快速回复:麻烦各位帮我看一下,运行时说程序错误,无法运行,是不是我漏掉那个地方 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026248 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved