//定义动态二维数组
i=M-1;
 float **SS=new float *[n[i]];
for(d=0;d<n[i];d++)
{SS[d]=new float [n[M-1]];}for(u=0;u<n[M-1];u++)
 for(int v=0;v<n[M-1];v++)
 {if(u==v)
{SS[u][v]=-f22(net[u][M-1]);}
else
{SS[u][v]=0;}
 }
//进入一个循环
i=M-2;
if(i>0)
{
float **SS1=new float *[n[i]];
for(d=0;d<n[i];d++)
SS1[d]=new float [n[M-1]];for (c=0;c<n[i];c++)
for(d=0;d<n[M-1];d++)
{SS1[c][d]=0;}for (c=0;c<n[i];c++)
for(d=0;d<n[M-1];d++)
for(int k=0;k<n[i+1];k++)
{SS1[c][d]=SS1[c][d]+(f11(net[c][i]))*W[t3+k*n[i]+c]*SS[k][d];
}
for(d=0;d<n[i+1];d++)
{delete []SS[d];
SS[d]=NULL;
}
delete []SS;
SS=NULL;
//利用SS1计算
t3=t3-(n[i-1]*n[i]+n[i]);for(c=q*n[M-1];c<(q+1)*n[M-1];c++)
{ int l=0;
while (l<n[i])
{
for(d=(t3+l*n[i-1]);d<(t3+(l+1)*n[i-1]);d++)
{Jacob[c][d]=SS1[l][c-q*n[M-1]]*a[d-(t3+l*n[i-1])][i-1];
}
l++;}
for(d=t3+(n[i-1]*n[i]);d<t3+(n[i-1]*n[i]+n[i]);d++)
{Jacob[c][d]=SS1[d-(t3+n[i-1]*n[i])][c-q*n[M-1]];}
}
//生成动态二维数组
float **SS=new float *[n[i]];
for(d=0;d<n[i];d++)
SS[d]=new float [n[M-1]];for(c=0;c<n[i];c++)
for(d=0;d<n[M-1];d++)
{SS[c][d]=SS1[c][d];}
for(d=0;d<n[i];d++)
{delete []SS1[d];
SS1[d]=NULL;
}
delete []SS1;
SS1=NULL;
i--;
}
程序调试的时候,循环外的SS的值无法传入,这是什么原因?
这个循环能运行,应该怎么做?请高手指点,谢谢!

解决方案 »

  1.   

    i=M-1;
    //申请动态内存。n[i]是随i变化的数组
    float **SS=new float *[n[i]];
    for(d=0;d<n[i];d++)
    {SS[d]=new float [n[M-1]];}

    for(u=0;u<n[M-1];u++)
      for(int v=0;v<n[M-1];v++)
      {if(u==v)
      {SS[u][v]=-f22(net[u][M-1]);}
       else
       {SS[u][v]=0;}
      }
                  
      //利用SS进行相关计算(略)
      …………………………………
      ……………………………….  
      //计算完后
        i=M-2;
       while(i>0)
         {
    float **SS1=new float *[n[i]];
    for(d=0;d<n[i];d++)
       SS1[d]=new float [n[M-1]];
                       //利用前面得到的SS的值计算SS1,并且作相关计算
                           …………………………
                           …………………………
                       //将前面申请的内存SS释放
                  for(d=0;d<n[i+1];d++)
    {delete []SS[d];
    SS[d]=NULL;
    }
    delete []SS;
    SS=NULL; 
    //在申请一个内存,名字仍为SS,只是大小变了
         float **SS=new float *[n[i]];
         for(d=0;d<n[i];d++)
    SS[d]=new float [n[M-1]];
          //蒋前面计算得到的SS1的值赋给SS
         for(c=0;c<n[i];c++)
    for(d=0;d<n[M-1];d++)
        {SS[c][d]=SS1[c][d];}

         //将SS1内存释放
         for(d=0;d<n[i];d++)
         {delete []SS1[d];
         SS1[d]=NULL;
         }
        delete []SS1;
        SS1=NULL;
         i--;
    }
    程序调试的时候,循环外的SS的值无法传入,这是什么原因?
    这个循环能运行,应该怎么做?请高手指点,谢谢!
      

  2.   

    //在申请一个内存,名字仍为SS,只是大小变了
    float **SS=new float *[n[i]];float **SS=new float *[n[i]];------
    在同个函数中..?
    变量最好不是使用相同的标识//看代码会头疼
      

  3.   


    to liuxiuk() 
    关键是循环中要用到前面那个变量,有没有什么别的解决方法?