Почему я вызываю функцию mkl EXC_BAD_ACCESS [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему я вызываю функцию mkl EXC_BAD_ACCESS [закрыто]

Сообщение Anonymous »

У меня есть фрагмент кода в main, который точно такой же, как код внутри функции собственного пространства.
введите здесь описание изображения
У меня вопрос: почему работает ли тот же код правильно, если его поместить непосредственно в основную функцию, но выдает ошибку при перемещении в функцию собственного пространства и вызове из основной? В частности, происходит сбой в строке:
введите здесь описание изображения
У меня возникнут проблемы, когда я вызову функцию eigenspace(), как в случае с фото: введите здесь описание изображения
Может ли кто-нибудь помочь мне решить эту проблему? так что я могу упаковать его в функцию и вызвать ее как обычно, спасибо
Мой класс Matrix:
class Matrix{
public:
using Allocator = CustomAllocator;
using Buffer = vector;
Matrix(size_t row , size_t col):m_nrow(row) , m_ncol(col) , m_buffer(row * col){}

void reset_buffer(size_t row , size_t col){
m_nrow = row;
m_ncol = col;
m_buffer = Buffer(col*row);
}

size_t nrow() const {
return m_nrow;
}

size_t ncol() const {
return m_ncol;
}

double operator()(size_t row, size_t col) const
{
return m_buffer[row*m_ncol + col];
}

double &operator()(size_t row , size_t col){
return m_buffer[row*m_ncol + col];
}

bool operator==(const Matrix &B){
if((m_nrow != B.nrow()) || (m_ncol != B.ncol())){
return false;
}else{
for(size_t i = 0 ; i < m_nrow ; ++i){
for(size_t j = 0 ; j < m_ncol ; ++j){
if(m_buffer[i * m_ncol + j] != B.m_buffer[i * m_ncol + j]){
return false;
}
}
}
return true;
}
}

Matrix &operator=(const Matrix &other) {
if (this != &other) {
m_nrow = other.m_nrow;
m_ncol = other.m_ncol;
m_buffer = other.m_buffer;
}
return *this;
}

double* data() { return m_buffer.data(); }
const double* data() const { return m_buffer.data(); }

private:
size_t m_nrow;
size_t m_ncol;
Buffer m_buffer;
std::vector m_data;
};

Matrix multiply_naive(const Matrix &mat1, const Matrix &mat2);
Matrix multiply_tile(const Matrix &mat1, const Matrix &mat2, size_t len_size);
Matrix multiply_mkl(const Matrix &mat1, const Matrix &mat2);
Matrix transpose(const Matrix& A);
Matrix eigenspace( std::vector& A ,const size_t n);
Matrix eigenspace2( std::vector& A_input , const int n , vector& wr , vector& wi , vector& vr);
void print_matrix(const Matrix &mat1);
void eigenDecomposition(Matrix& A, double realEigenvalues[], double imagEigenvalues[], Matrix& rightEigenvectors);

void print_matrix(const Matrix &mat1)
{
for(int i = 0; i < mat1.nrow() ; ++i){
for(int j = 0; j < mat1.ncol() ; ++j){
cout

Подробнее здесь: https://stackoverflow.com/questions/792 ... bad-access
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»