2 xxss0903 xxss0903 于 2014.11.22 01:27 提问

MFC链表赋值,内存不能为read

运行到这里就出错了,报内存不能read。
CURVE_DATA *first_node=NULL;
CURVE_DATA *data_node=NULL;
data_head=first_head;
data_head和first_head是链表。
额- -!我是个小白,没有币给各位了,还请不吝赐教,谢谢了!
PS:这个能上传文件吗?

6个回答

xxss0903
xxss0903   2014.11.23 02:50
已采纳

找到错的地方了,定义深度数组的大小定义小了,把ROW定义大点就行了。
float depth[ROW];
int lineNum=0;
lineNum=(maxDepth-minDepth)/delta;
int row=0;
for(row=0;row<lineNum;row++)
{
depth[row]=minDepth+delta*row;
}

91program
91program   Ds   Rxr 2014.11.22 10:02

first_head 没有分配地址,操作 NULL 无论是写、还是读都会出错的.

xxss0903
xxss0903 我贴了前面的代码,请您看看,谢谢!
3 年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2014.11.22 10:36

没有开辟内存空间。。。当然不能读写

xxss0903
xxss0903 贴了前面从定义开始到出错的地方的代码,请您帮忙看看,谢谢了!
3 年多之前 回复
u010925162
u010925162   2014.11.22 14:52

指针没有开辟内存空间;最好把前面的代码贴上,这样才更好分析!

xxss0903
xxss0903 已经贴了,请您看看,谢谢!
3 年多之前 回复
xxss0903
xxss0903   2014.11.22 19:14
    CURVE_HEAD *first_head=NULL;
    CURVE_HEAD *data_head=NULL;
    float delta=0.0;//曲线的采样长度
    int num=0;

    for(num=0;num<curveNum;num++)
    {
        data_head=new CURVE_HEAD;
        data_head->position=curvePosition[num];//将曲线位置导入data_head
        wisfile[j].seekg(curvePosition[num],ios::beg);
        WIS_CHANNEL *channel;
        channel= new WIS_CHANNEL;//wis通道
        wisfile[j].read(reinterpret_cast<char *>(channel),sizeof(WIS_CHANNEL));
        data_head->startMD=channel->DimInfo[0].StartVal;
        delta=channel->DimInfo[0].Delta;
        data_head->stopMD=channel->DimInfo[0].StartVal+delta*channel->DimInfo[0].MaxSamples;
        int i=0;
        for(i=0;i<16;i++)
        {
            data_head->Name[i]=curveName[num][i];
        }
        for(i=0;i<8;i++)
        {
            data_head->Unit[i]=channel->Unit[i];
        }
        strwisid.Format("StopMd:%f",data_head->stopMD);

        data_head->next=first_head;
        first_head=data_head;
    }
//*************************判断曲线的最小初始深度和最大的最大深度********************
    float minDepth=0.0;
    float maxDepth=0.0;
    minDepth=first_head->startMD;
    maxDepth=first_head->stopMD;
    int pointnum=0;
    for(data_head=first_head;data_head!=NULL;data_head=data_head->next)
    {
        pointnum+=1;
        if(minDepth>data_head->startMD)
        {
            minDepth=data_head->startMD;
        }
        if(maxDepth<data_head->stopMD)
        {
            maxDepth=data_head->stopMD;
        }
    }

    float depth[ROW];
    int lineNum=0;
    lineNum=(maxDepth-minDepth)/delta;
    int row=0;
    for(row=0;row<lineNum;row++)
    {
        depth[row]=minDepth+delta*row;
    }

    //****************************************
    CURVE_DATA *first_node=NULL;
    CURVE_DATA *data_node=NULL; 

    data_head=first_head;

//***********************************************************
以上就是从data_head和first_head从定义开始到大概出错的地方了,

happyparrot
happyparrot   Ds   Rxr 2014.11.24 15:07

这不是作弊么,自己采纳自己的答复。建议CSDN处理。

xxss0903
xxss0903 不好意思,第一次发帖,不是太清楚,还请见谅,下次不会了!
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!