数组迭代器偏移超出范围? C ++库超出范围?

时间:2015-11-06 09:14:00

标签: c++ arrays visual-studio-2013 bitset

我的以下代码工作正常,但当我更改std::bitset<4> bin_x(i);时 to std::bitset<5> bin_x(i);给出了一个错误的Array Iterator Offset超出范围和C ++库超出范围。我设置了断点,我没有看到任何数组超出范围。可能是什么问题呢? 尾数:3或4。 指数:3。 偏见:3。

我正在使用Visual Studio 2013。

#include<iostream>
#include <math.h>
#include <bitset>
#include <limits.h>
#include <iomanip>
#include <array>

using namespace std;


double vm_value(string str_bin,int man)
{
double sum = 0;
char a[4];
int ia[4];
std::copy(str_bin.begin(), str_bin.end(), a);
for (int i = 0; i < (std::end(a) - std::begin(a)); i++)
{
    ia[i] = a[i] - '0';
}
for (int i = 0; i < (std::end(ia) - std::begin(ia)); i++)
{
    sum = sum + ldexp(ia[i], (-i - 1));
}

return sum;


}



 int main()
{
int exp,man,bias,i;
double Vm,Ve;
cout << "No. of Bits of Exponent: ";
cin >> exp;
cout << "No. of Bits of Mantisa: ";
cin >> man;
cout << "Bias: ";
cin >> bias;
/*int *m;
m = new (nothrow) int[man];*/
for (i = 0; i < (pow(2,man));i++)
{
    for (int j = 0; j < (pow(2, exp)); j++)
    {

        if (i==0)
        {
            std::bitset<3> bin_x(j);
            cout << "\t\t";
            std::cout << bin_x;
        }
    }
    if (i == 0){ cout << "\n\t\tVe ->";}
    for (int k = 0; k < (pow(2, exp)); k++)
    {
        if (i == 0)
        {
            int temp = k-bias;
            cout << "\t\t";
            cout << temp;
        }
    }
    if (i == 0){ cout << "\nBits of\t\tVm\t\t\t\t\t\tVm x 2^Ve in Decimal\nMantissa\n"; }
    std::bitset<4> bin_x(i); //THIS ONE THIS ONE THIS ONE
    std::string str_bin = bin_x.to_string();
    Vm= vm_value(str_bin,man);
    cout << "\n";
    double Vm1 = 1 + Vm;
    std::cout << bin_x << "\t\t" << Vm1;
    for (int l = 0; l < (pow(2, exp)); l++)
    {
        Ve = l - bias;
        cout.setf(ios::fixed, ios::floatfield);
        cout.precision(3);
        std::cout << "\t\t" << ldexp(Vm1, Ve);
    }
}
getchar();
getchar();
return 0;

}

0 个答案:

没有答案