c++ - 代码块在执行代码时给我以下错误(甚至奇偶汉明代码)
问题描述
这是它在构建日志中显示的内容:
检查是否存在:C:\CodeBlocks\hammingcodeven.exe 正在执行:'"C:\CodeBlocks/cb_console_runner.exe" "C:\CodeBlocks\hammingcodeven.exe"'(在 'C:\CodeBlocks' 中)设置变量:PATH= C:\MinGW\bin;C:\MinGW;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows \System32\OpenSSH;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Users\mahek \AppData\Local\Microsoft\WindowsApps 进程终止,状态为 -1073741510(0 分钟,54 秒)
这是使用偶校验汉明码后找到 m 位码的二进制值的代码
#include<iostream>
#include<math.h>
using namespace std;
class data
{
int A[50],m,r,ps[6],B[6][56],final[56];
public:
void show();
void input();
void findr();
void findps();
void binary();
void findfinal();
};
void data::input()
{
cout<<"Enter length of frame:";
cin>>m;
cout<<"Enter frame:";
for(int i=1;i<=m;i++)
{
cin>>A[i];
}
findr();
}
void data::findr()
{
r=0;
for(int i=1;i<=m;i++)
{
int x=pow(2,i);
if(x>(m+i+1))
{
r=i;
break;
}
}
if(r==0)
cout<<"Error";
binary();
}
void data::binary()
{
for(int i=1;i<=m+r;i++)
{
int h=i;
for(int j=r;j>=1;j--)
{
B[i][j]=h%2;
h=h/2;
}
}
findps();
}
void data::findps()
{
for(int i=1;i<=r;i++)
ps[i]=0;
for(int i=1;i<=m+r;i++)
{
for(int j=1;j<=r;j++)
{
ps[j]=ps[j]^B[i][j];
}
}
findfinal();
}
void data::findfinal()
{
for(int i=1,j=1;i<=m+r,j<=r;i++,j*=2)
{
if(i==j)
{
final[i]=ps[j];
}
else
final[i]=A[i];
}
}
void data::show()
{
cout<<"Input:";
for(int i=1;i<=m;i++)
cout<<A[i]<<" ";
cout<<endl;
cout<<"Output:";
for(int i=1;i<=m+r;i++)
cout<<final[i]<<" ";
}
int main()
{
data obj;
obj.input();
obj.show();
}
解决方案
在函数的第一个循环中binary()
,变量 i 可以达到m + r
. 在您的示例中,m 为 8,因此m + r
至少为 9。但是,i 用于索引 B 的第一个维度,其大小为 6。访问 B 超出其定义的大小会导致读取/写入堆栈上的其他内存,从而导致未定义的行为。为了解决这个问题,您可以动态分配具有所需大小的字段。我还强烈建议为您的字段提供有意义的名称,以帮助人们理解您的代码正在尝试做什么。
此外,您对数组的索引不正确。在 C++ 和许多其他语言中,数组是零索引的,这意味着大小为 n 的数组 A 的第一个值在 A[0] 处,最后一个值在 A[n-1] 处。
推荐阅读
- linux - 模拟 ALT +
在 Linux 中 - c# - 协程彻底冻结 Unity 2020.3
- angular - 找不到具有名称的控件:接受
- python - 运行 Python RPA 机器人的任务计划程序任务失败
- solidity - Solidity:嵌套映射访问不能返回
- android - Google Play 是否为启动前测试激活 StrictMode?
- android - 使用 OkHttp 拦截器的 Http 请求不起作用
- laravel - Laravel 迁移:托管服务器上的 Json 列错误,但本地 Xampp 服务器上没有
- python - 用于语音识别的 MLP
- glm - 如何将 relaimpo 与 glm 一起使用?