标题:C语言编程求助,酬金1000元RMB
取消只看楼主
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
结帖率:0
已结贴  问题点数:20 回复次数:6 
C语言编程求助,酬金1000元RMB
     我的程序代码如下:                 
                        for(j=1;j<=10000;j++)
                        {
                                  if(head_se==NULL)                               /*将产生的二次电子添加到二次电子链表尾部*/
                               {
                                   head_se=(Particle*)malloc(sizeof(Particle));
                                   if(head_se==NULL)
                                   {
                                        printf("\nNot enough memory or allocate memory error happened.\n");
                                        exit (1);
                                   }
                                   tail_se=head_se;
                                   head_se->previous=NULL;
                               }                       
                               else
                               {
                                   tail_se->next=(Particle*)malloc(sizeof(Particle));
                                   if(tail_se->next==NULL)
                                   {
                                      printf("\nNot enough memory or allocate memory error happened.\n");
                                      exit (1);
                                   }
                                   tail_se->next->previous=tail_se;
                                   tail_se=tail_se->next;
                               }
/**********************************************************************/
/******更新电子速度-得到碰撞后的速度*********/
/**********************************************************************/

                               Rf1=ran1(p_idum);
                               Rf2=ran1(p_idum);
                    
                               tail_se->v.vr=fabs(v_extent*sqrt(Rf2*(2-Rf2))*sin(2*PI*Rf1))/V_N;
                               tail_se->v.vt=v_extent*sqrt(Rf2*(2-Rf2))*cos(2*PI*Rf1)/V_N;
                               tail_se->v.vz=v_extent*(1-Rf2)/V_N;

                               tail_se->mass=ME;
                               tail_se->charge=e_sim;
                               tail_se->p00=0;   /*权重系数需在下一循环重新计算*/
                               tail_se->p01=0;
                               tail_se->p10=0;
                               tail_se->p11=0;

                               tail_se->next=NULL;
                        }
              其中head_se和tail_se是指向我定义的结构体的指针变量。

上面是我的程序代码中的一段,9870步之前运行都正常,但是第9871个循环时,显示“Not enough memory or allocate memory error happened.”,即我上面程序中                                   

                                   tail_se->next=(Particle*)malloc(sizeof(Particle));
                                   if(tail_se->next==NULL)
                                   {
                                      printf("\nNot enough memory or allocate memory error happened.\n");
                                      exit (1);
                                   }
                                   给 tail_se->next分配内存失败
我的问题是:1.是什么导致 tail_se->next=(Particle*)malloc(sizeof(Particle))失败的?
            2.为什么前面9870个循环都每问题,9871步却出现这个问题?
哪位大神能够帮我解决这个问题,本人给酬金100人民币,可微信红包。请联系我:17739971880

[此贴子已经被作者于2017-10-23 21:36编辑过]

搜索更多相关主题的帖子: NULL malloc sizeof memory next 
2017-10-22 22:28
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
回复 2楼 吹水佬
可是我的可用内存还有10G啊?不应该内存不够啊?
2017-10-23 20:37
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
路过的大侠前辈们,能否帮忙看下我的程序,我最近博士毕业,但是程序这个问题总是解决不了,拜托了.

报酬好说,还希望江湖救急啊,感激不尽.

本人微信(电话) :17739971880
2017-10-23 21:06
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
我的结构体定义如下:
  struct vectorv     /*定义速度结构体变量*/
   {
      double vz;      /* z向速度分量 */
      double vr;      /* r向速度分量 */
      double vt;      /* t向速度分量 */
   };
   
   
  typedef struct P     /* 带电粒子*/
   {
      double r;                     /*径向坐标 */
      double z;                      /*轴向坐标 */  
      int    tag;              
      struct vectorv v;              /* 速度 */
      double mass;                   /* 粒子质量 */
      double charge;                 /* 粒子电荷 */
      double p00;                     /* 4个网格点的权重系数*/
      double p11;
      double p01;
      double p10;
      struct P *next;         /* 指向链表中的下一个粒子 */
      struct P *previous;         /* 指向链表中的上一个粒子 */
   }Particle;

 extern Particle *head_e;
 extern Particle *head_se;
 extern Particle *head_xe1;
 extern Particle *tail_e;
 extern Particle *tail_se;
 extern Particle *tail_xe1;
2017-10-23 21:34
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
回复 2楼 吹水佬
sizeof(Particle)是104个字节
2017-10-23 21:42
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
我用的是64位的win7。也就是说用malloc()函数给结构体分配内存的话,最多不能超过1G?
这个虚拟内存和什么有关?处理器个数?物理内存?
我家里的电脑是8核i7,16G内存。
单位的电脑是32核i5,120G内存。
如果在单位电脑上运行,是否会避免我家里电脑上运行所出现的问题?
2017-10-24 08:43
long_23737
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-10-22
得分:0 
回复 11楼 xzlxzlxzl
前辈,能否留个联系方式,我把我的程序发给您,请帮忙看下,问题到底在哪里。明年要毕业,压力山大啊。
2017-10-24 08:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481663-1-1.html




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

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