返回信息流vs2008下程序如下
#include <iostream>
#include <cmath>
#include <malloc.h>
using namespace std;
bool IsEqual(float f1, float f2, int absDelta)
{
int i1, i2;
i1 = ( f1>0) ? ((int&)f1) : ( (int&) f1 - 0x80000000 );
i2 = (f2>0) ? ((int&)f2) : ( (int&) f2 - 0x80000000 );
return ((abs(i1-i2))<absDelta) ? true : false;
}
int main()
{
int r,s;
int m1(1),m2(1);
while(m1)
{
cout<<"请输入正确的信源符号个数"<<endl;
cin>>r;
if(r>0)
m1=0;
};
float* pr;
pr=(float*)malloc(r*sizeof(float));
for(int k=1;k<=r;k++)
{
*pr=(float)1/r;
pr+=sizeof(float);
} //初始化信源分布矩阵
while(m2)
{
cout<<"请输入正确的信宿符号个数"<<endl;
cin>>s;
if(s>0)
m2=0;
};
float pji,sumrow(0),sunlist(0);
float* p;
p=(float*)malloc(r*sizeof(float));
for(int j=1;j<=r;j++)
{
for(int i=1;i<=s;i++)
{
int m(1);
while(m)
{
cout<<"请输入p["<<j<<"]["<<i<<"]"<<endl; cin>>pji;
*p=pji;
if(*p>0.0 && *p<1.0)
m=0;
}
sumrow+=*p;
*p+=sizeof(float);
}
if(IsEqual(sumrow,1.0,0))
{
cout<<"本行输入有误请重新输入"<<endl;
j--;
p-=r*sizeof(float);
sumrow=0;
}
} //信道转移概率矩阵
cout<<p<<endl;
p-=r*s*sizeof(float);
cout<<p<<endl;
free(pr);
free(p);
return 0;
}
调试到红色那句时出现内存访问错误
这是一条镜像帖。来源:北邮人论坛 / cpp / #31327同步于 2009/11/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
内存访问出错 求指点
foreveryou
2009/11/14镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 ki 的大作中提到: 】
: *p+=sizeof(float);
: 把 asterisk 去掉,你这样只减不加,当然会出错
非常感谢!
但是我改了之后还是出现了访问错误
cout<<"请输入p["<<j<<"]["<<i<<"]"<<endl;
这句话就出现了问题 j 的访问出现错误
能解释下么?
1. 首先,不太明白IsEqual()的含义,LZ的意思是不是说,给定任意两个浮点数,如果它们在可容忍的范围之内,就认为它们相等?那为什么absDelta会是int型的呢?
难道他们只要整数部分部分相同,就认为是相同了?
2. LZ在IsEqual()函数里面,最后比较abs()和absDelta比较大小;但是在main函数里面调用,absDelta=0,那abs()出来的一个值,还能比0小么?那这个条件不是永远是错的么?
3. 其次没看明白,咋突然用malloc和free了……不是new和delete么?
4. 至于LZ提到的问题,为什么出来框框,不用想了。就是内存出错了。比如说,数组访问越界等。