| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 507 人关注过本帖
标题:程序执行不下去,请教原因。
只看楼主 加入收藏
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
结帖率:90.32%
收藏
已结贴  问题点数:20 回复次数:5 
程序执行不下去,请教原因。
鄙人编写了一个C++程序,当执行到第二次循环时(iy=1)程序就执行不下去了,请教论坛上的高手指出程序问题出在哪?现行谢过!
程序如下:
// try0.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<fstream>
#include<cmath>
using namespace std;

    int Nx=3;
    int Ny=4;


// 动态分配二维指针

class TwoArrayAllocation
{
private:
    double** pToDoubleMatrix;
    int** pToIntMatrix;
public:
    TwoArrayAllocation( );
    TwoArrayAllocation(double** pToDouM,int** pToIM);
    double** TwoArrayDoubleAlloc(int nRow,int nCol);
    int** TwoArrayIntAlloc(int nRow,int nCol);
    void DoubleTwoArrayFree(int nRow,double** pT);
    void IntTwoArrayFree(int nRow,int** pT);
    ~TwoArrayAllocation( ){ };
};

TwoArrayAllocation::TwoArrayAllocation( )
{
}

TwoArrayAllocation::TwoArrayAllocation(double** pToDouM,int** pToIM):pToDoubleMatrix(pToDouM),pToIntMatrix(pToIM)
{
}

double** TwoArrayAllocation::TwoArrayDoubleAlloc(int nRow,int nCol)
{
    pToDoubleMatrix=new double* [nRow];
    if(!pToDoubleMatrix)
    {
        cout<<"内存分配失败!"<<endl;
        exit(-1);
    }
    for(int j=0;j<nRow;j++)
    {
        pToDoubleMatrix[j]=new double [nCol];
        if(!pToDoubleMatrix)
        {
            cout<<"内存分配失败!"<<endl;
            exit(-1);
        }
    }
    return pToDoubleMatrix;
}


int** TwoArrayAllocation::TwoArrayIntAlloc(int nRow,int nCol)
{
    pToIntMatrix=new int* [nRow];
    if(!pToIntMatrix)
    {
        cout<<"内存分配失败!"<<endl;
        exit(-1);
    }
    for(int j=0;j<nRow;j++)
    {
        pToIntMatrix[j]=new int [nCol];
        if(!pToIntMatrix)
        {
            cout<<"内存分配失败!"<<endl;
            exit(-1);
        }
    }
    return pToIntMatrix;
}

void TwoArrayAllocation::DoubleTwoArrayFree(int nRow,double** pToDoubleMatrix)
{
    for(int i=0;i<nRow;i++)
        delete [] pToDoubleMatrix[i];
    delete []pToDoubleMatrix;
}


void TwoArrayAllocation::IntTwoArrayFree(int nRow,int** pToIntMatrix)
{
    for(int i=0;i<nRow;i++)
        delete [] pToIntMatrix[i];
    delete []pToIntMatrix;
}

double ElementalNodeTranfer(double** Lemex,double** Lemey,double** nTran)  // 谱单元周界结点按逆时针排列的四个边界单元编号矩阵。
{
    int inode(-1);
    int i1nod(-1);
    int i2nod(-1);
    int i3nod(-1);
    int i4nod(-1);

    for(int iy=0;iy<Ny+1;iy++)
    {
        for(int ix=0;ix<Nx+1;ix++)
        {
            inode+=1;
            if(iy==0)
            {
                i1nod+=1;
                Lemex[0][i1nod]=inode;
                cout<<"Lemex["<<iy<<"]["<<i1nod<<"]="<<inode<<endl;
            }
            if(ix==Nx)
            {
                i2nod+=1;
                Lemey[0][i2nod]=inode;
                cout<<"Lemey["<<ix<<"]["<<i2nod<<"]="<<inode<<endl;
            }
            if(iy==Ny)
            {
                i3nod+=1;
                Lemex[1][Nx-i3nod]=inode;
                cout<<"Lemex["<<iy<<"]["<<Nx-i3nod<<"]="<<inode<<endl;
            }
            if(ix==0)
            {
                i4nod+=1;
                Lemey[1][Ny-i4nod]=inode;
                cout<<"Lemey["<<ix<<"]["<<Ny-i4nod<<"]="<<inode<<endl;
            }
            nTran[ix][iy]=inode;
            cout<<"nTran["<<ix<<"]["<<iy<<"]="<<nTran[ix][iy]<<endl;
        }
    }
    return(0);
}


int _tmain(int argc, _TCHAR* argv[])
{
    int i,j;
    double** Lemex;
    double** Lemey;
    double** nTran;

    TwoArrayAllocation pT;
    Lemex=pT.TwoArrayDoubleAlloc(2,3);
    Lemey=pT.TwoArrayDoubleAlloc(2,4);
    nTran=pT.TwoArrayDoubleAlloc(3,4);

    ElementalNodeTranfer(Lemex,Lemey,nTran);

    pT.DoubleTwoArrayFree(2,Lemex);
    pT.DoubleTwoArrayFree(2,Lemey);
    pT.DoubleTwoArrayFree(3,nTran);

    return 0;
}

搜索更多相关主题的帖子: 应用程序 private include public double 
2010-05-03 09:36
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
数组越界了,
nTran[ix][iy]=inode;  //第一轮循环ix已经增加到3,而nTran的大小为3*4的、
cout<<"nTran["<<ix<<"]["<<iy<<"]="<<nTran[ix][iy]<<endl;

if(iy==0)
 {
        i1nod+=1;
        Lemex[0][i1nod]=inode;         //这里也是。内循环最后一轮inode已到3,lemex大小为2*3
        cout<<"Lemex["<<iy<<"]["<<i1nod<<"]="<<inode<<endl;
  }
其他地方应该也会有越界的行为,仔细看看吧,

离恨恰如春草,更行更远还生。
2010-05-03 11:00
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
多谢!
2010-05-03 11:29
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
回二楼:nTran[ix][iy]=inode目的是把inode的值赋给第ix行iy列的矩阵nTran,第二次循环时ix不是重新赋值为0了吗,怎么会数组越界呢?还有就是“Lemex[0][i1nod]=inode;//这里也是。内循环最后一轮inode已到3,lemex大小为2*3” 也是一样的情况哦。请解释。
2010-05-03 11:45
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
二楼的意见是对的!我理解错了,再次感谢!
2010-05-03 15:51
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:10 
可能是数组越界了。
我以前也遇见过这种问题。

南国利剑
2010-05-03 19:35
快速回复:程序执行不下去,请教原因。
数据加载中...
 
   



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

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