LINUX.ORG.RU

История изменений

Исправление XMs, (текущая версия) :

Ты пишешь в неинициированный указатель. Результат такой операции — UB, чего ты и наблодаешь. Делать надо было либо так:

#include <iostream>
#include <cstdint>

#include "plane.hpp"

static float bx[][6] = {{0, -5, -6, 0, 6, 5}, {1, 1, 1}};

using namespace std;

Plane::Plane(int planetype)
{
    cout << sizeof(bx[planetype]) << " " << sizeof(bx[planetype][0])
         << " " << sizeof(bx[planetype]) / sizeof(bx[planetype][0]) << endl;
         
    bodyx = new float[2 * 6];
         
    size_t limit = sizeof(bx[planetype])/sizeof(bx[planetype][0]);
    for(size_t k = 0; k < limit; k++)
    {
        bodyx[k] = bx[planetype][k];
        cout << bodyx[k] << " ";
    }
    cout << endl;
}

Plane::~Plane()
  { delete[] bodyx; }

Либо так:

#include <iostream>
#include <cstdint>

#include "plane.hpp"

static float bx[][6] = {{0, -5, -6, 0, 6, 5}, {1, 1, 1}};

using namespace std;

Plane::Plane(int planetype)
{
    cout << sizeof(bx[planetype]) << " " << sizeof(bx[planetype][0])
         << " " << sizeof(bx[planetype]) / sizeof(bx[planetype][0]) << endl;
         
    bodyx = bx[planetype];
         
    size_t limit = sizeof(bx[planetype])/sizeof(bx[planetype][0]);
    for(size_t k = 0; k < limit; k++)
    {
        cout << bodyx[k] << " ";
    }
    cout << endl;
}

Исходная версия XMs, :

Ты пишешь в неинициированный указатель. Результат такой операции — UB, чего ты и наблодаешь. Делать надо было либо так:

#include <iostream>
#include <cstdint>

#include "plane.hpp"

static float bx[][6] = {{0, -5, -6, 0, 6, 5}, {1, 1, 1}};

using namespace std;

Plane::Plane(int planetype)
{
    cout << sizeof(bx[planetype]) << " " << sizeof(bx[planetype][0])
         << " " << sizeof(bx[planetype]) / sizeof(bx[planetype][0]) << endl;
         
    bodyx = new float[2 * 6];
         
    size_t limit = sizeof(bx[planetype])/sizeof(bx[planetype][0]);
    for(size_t k = 0; k < limit; k++)
    {
        bodyx[k] = bx[planetype][k];
        cout << bodyx[k] << " ";
    }
    cout << endl;
}

Plane::~Plane()
  { delete[] bodyx; }

Либо так:

#include <iostream>
#include <cstdint>

#include "plane.hpp"

static float bx[][6] = {{0, -5, -6, 0, 6, 5}, {1, 1, 1}};

using namespace std;

Plane::Plane(int planetype)
{
    cout << sizeof(bx[planetype]) << " " << sizeof(bx[planetype][0])
         << " " << sizeof(bx[planetype]) / sizeof(bx[planetype][0]) << endl;
         
    bodyx = bx;
         
    size_t limit = sizeof(bx[planetype])/sizeof(bx[planetype][0]);
    for(size_t k = 0; k < limit; k++)
    {
        cout << bodyx[k] << " ";
    }
    cout << endl;
}