Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Проблема с динамической памятью


Автор: ioManip 25.8.2015, 06:59
Здравствуйте! Скажите, пожалуйста, в чем моя проблема??
Пытаюсь транспонировать матрицу разной размерности
main.cpp
Код

int main()
{
    const size_t row = 3;
    const size_t column = 4;
    const size_t matrixSize = row * column;

    float *inMatrix = new float[matrixSize];
    float *outMatrix = new float[matrixSize];

    fillMatrix(inMatrix, row, column);
    printMatrix(inMatrix, row, column);
    transpose(inMatrix, outMatrix, row, column);
    printMatrix(outMatrix, column, row);


    delete[] inMatrix;
    delete[] outMatrix;

    getchar();

    return 0;
}

cpu.cpp
Код

void fillMatrix(float *matrix, const size_t row, const size_t column)
{
    std::srand(std::time(0));

    const float X = 100.0f;

    for (size_t i = 0; i < row; i++)
    {
        for (size_t j = 0; j < column; j++)
        {
            matrix[i * column + j] = static_cast<float>(std::rand() / static_cast<float>(RAND_MAX / X));
        }
    }
}

void printMatrix(float *matrix, const size_t row, const size_t column)
{
    std::cout << "\n";
    for (size_t i = 0; i < row; i++)
    {
        for (size_t j = 0; j < column; j++)
        {
            std::cout << std::setw(10) << matrix[i * column + j];
        }
        std::cout << "\n";
    }
}

void transpose(float *inMat, float *outMat, const size_t row, const size_t column)
{
    for (size_t i = 0; i < row; i++)
    {
        for (size_t j = 0; j < column; j++)
        {
            outMat[i * row + j] = inMat[j * column + i];
        }
    }
}

cpu.h
Код

void fillMatrix(float *matrix, const size_t row, const size_t column);
void printMatrix(float *matrix, const size_t row, const size_t column);
void transpose(float *inMat, float *outMat, const size_t row, const size_t column);


Результат программа выдает верный, но не до конца.
Например при размерности 3 на 4
Код

   24.6071   65.5538   64.5619   64.6474
   35.1207   75.3258   58.3666   72.6402
   66.5365   43.9955   76.3176    8.8229

   24.6071   35.1207   66.5365
   65.5538   75.3258   43.9955
   64.5619   58.3666   76.3176
-1.21979e-012-4.31602e+008-4.31602e+008

А при 4 на 3 вообще падает

Автор: volatile 25.8.2015, 10:53
Собака порылась в строке 35 файла cpu.cpp
Цитата(ioManip @  25.8.2015,  06:59 Найти цитируемый пост)
            outMat[i * row + j] = inMat[j * column + i];
            outMat[i + j * row] = inMat[i * column + j];

или что-то типа того, проверяйте.

Автор: ioManip 25.8.2015, 11:18
volatile, Действительно, в этом и была ошибка! Спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)