返回信息流程序运行结果只显示 按任意键继续
我设置断点调试就弹出上面的对话框(断点设置在while循环的前面)
请问是什么问题
代码如下
#include <iostream>
#include <cmath>
#define m 1000
#define n 1000
#define Δ 1e-6
using namespace std;
int main()
{
int r,s;
float C1(0),C2(0);
float P[m][n];
float q[m];
float fai[m][n];
float c[m][n];
cout<<"请输入信源符号个数"<<endl;
cin>>r;
cout<<"请输入信宿符号个数"<<endl;
cin>>s;
for(int i=0;i<=r-1;i++)
{
cout<<"请输入q["<<i+1<<"]"<<endl;
cin>>q[i];
}
for(int i=0;i<=r-1;i++)
for(int j=0;j<=s-1;j++)
{
cout<<"请输入P["<<i+1<<"]["<<j+1<<"]"<<endl;
cin>>P[i][j];
} //初始化信源分布
int k=1;
float sum1(0),sum2(0),sum3(0);
float S[n];
while(k)
{
for(int i=0;i<=r-1;i++)
for(int j=0;j<=s-1;j++)
{
for(int x=0;x<=r-1;x++)
{
sum1+=q[x]*P[j][x];
}
fai[i][j]=q[i]*P[j][i]/sum1;
} //计算fai[i][j]
for(int i=0;i<=r-1;i++)
for(int j=0;j<=s-1;j++)
{fai[i][j]=log10(fai[i][j]);}
for(int i=0;i<=r-1;i++)
{
for(int j=0;j<s-1;j++)
{
sum2 += P[j][i]*fai[i][j];
}
sum2 = exp(sum2);
S[i] = sum2;
} //计算中间数组S[i]
for(int i=0;i<=r-1;i++)
{
for(int j=0;j<=s-1;j++)
{
sum2 += P[j][i]*fai[i][j];
}
sum2 = exp(sum2);
for(int x=0;x<r-1;x++)
{
sum3 += S[x];
}
q[i]=sum2/sum3;
} //重置信源分布
C1 = C2;
C2 = log10(sum3);
if(fabs(C2-C1)/C2>Δ)
{k++;}
else k=0;
}
cout<<"最佳信源分布如下"<<endl;
for(int i=0;i<=r-1;i++)
{cout<<q[i]<<'\t';}
cout<<"信道容量为"<<endl;
cout<<C2;
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #29410同步于 2009/10/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助
foreveryou
2009/10/7镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 foreveryou 的大作中提到: 】
:
: 程序运行结果只显示 按任意键继续
: 我设置断点调试就弹出上面的对话框(断点设置在while循环的前面)
: ...................
【 在 jmpesp 的大作中提到: 】
: 从上面的这个图看出应该是堆栈不平衡所致的错误。你看下是否数组越界?
我重新查了下 是程序开始的那两行二维数组的定义出了问题
请问 #define m 10
int a[m] 可以
难道 #define m 10
#define n 10
int b[m][n] 就不可以么
【 在 foreveryou 的大作中提到: 】
: 我重新查了下 是程序开始的那两行二维数组的定义出了问题
: 请问 #define m 10
: int a[m] 可以
: ...................
跟这个没关系。你这个出错的在于你在堆栈分配的空间太大了,超过默认的栈大小了,所以当然出错了。
float P[m][n]; //1M
float q[m];
float fai[m][n]; ///1M
float c[m][n]; //1M
这个都几M啦!默认的栈大小是1M。所以出错了
【 在 jmpesp 的大作中提到: 】
: 跟这个没关系。你这个出错的在于你在堆栈分配的空间太大了,超过默认的栈大小了,所以当然出错了。
: float P[m][n]; //1M
: float q[m];
: ...................
好的,问题已经解决了,请问默认栈的大小可以修改么 ?在哪里 修改 我用的 visual studio2008
【 在 foreveryou 的大作中提到: 】
: 好的,问题已经解决了,请问默认栈的大小可以修改么 ?在哪里 修改 我用的 visual studio2008
我没用过vs2008,你可以去看下链接选项,里面应该是有设置默认栈大小的。其实默认栈大小存在与exe可执行文件的头部。
【 在 jmpesp 的大作中提到: 】
: 我没用过vs2008,你可以去看下链接选项,里面应该是有设置默认栈大小的。其实默认栈大小存在与exe可执行文件的头部。
哦 好的 非常感谢你的耐心
默认栈大小是1M?
学习了学习了~~
【 在 jmpesp (缅甸果敢第一司令) 的大作中提到: 】
: 跟这个没关系。你这个出错的在于你在堆栈分配的空间太大了,超过默认的栈大小了,所以当然出错了。
: float P[m][n]; //1M
: float q[m];
: ...................