matlab — Mat_Open не работает при использовании matio в переполнении стека

Я использую библиотеку matio для записи содержимого std::vector<std::vector<std::vector<double>>> и некоторые другие данные в файл MatLab. Я использовал учебник здесь: http://na-wiki.csc.kth.se/mediawiki/index.php/MatIO

Тем не мение, Mat_Open остается NULLЭто означает, что я ничего не могу записать в файл. Там нет сообщений об ошибках, ссылки / компиляция в порядке, Saving mat file никогда не печатается и код выхода программы 0, Я что-то упускаю из виду?

Содержимое функции, которая должна создать файл MatLab:

mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;

mat = Mat_Open("/home/ruben/data.mat", MAT_ACC_RDWR);

if(mat != NULL) {
std::cout << "Saving mat file" << std::endl;
matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, matrix, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);

matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);

Mat_Close(mat);
}

Я включаю библиотеку используя #include <matio.h>и связать его с -std=c++11 -L/usr/lib -lmatio -lz, Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Я нашел проект на GitHub, представил это как проблему: https://github.com/tbeu/matio/issues/45

0

Решение

Я нашел решение сам, с некоторой помощью автора проекта.
Две вещи шли не так:

  1. Если файл MatLab еще не существует, следует использовать Mat_Create или же Mat_CreateVer,
  2. std::vector элементы не могут быть просто использованы в качестве аргументов Mat_VarCreate функция. Вместо этого следует передать указатель на первый элемент.

Обновлен рабочий код:

mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;

mat = Mat_Create("/home/ruben/data.mat", NULL);

if(mat != NULL) {
std::cout << "Saving mat file" << std::endl;
matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, &matrix->at(0), 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);

matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);

Mat_Close(mat);
}

Надеюсь, это будет кому-то полезно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]