代码块在执行代码甚至奇偶校验汉密代码时给我以下错误

问题描述

error message

This is the message i receive after giving input

这是在构建日志中显示的内容:

检查是否存在: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)管理引擎组件\ DAL; C:\ Program Files \ Intel \ Intel(R)管理引擎组件\ 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]。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...