Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
mgevlich
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 3
#1

Обращение к double** из метода dll вызывает ошибку памяти - C++

26.05.2013, 11:58. Просмотров 492. Ответов 1
Метки нет (Все метки)

Есть класс который создает двухмерный массив. Этот класс экпортирую в dll и использую полученную библиотеку в программе С#. Все методы(которые здесь не упомяноты) работают, кроме одного SomeClass::SaveFile. Собственно при вызове этого метода происходит ошибка в которой говорится что память повреждена, однако данные someData доступны.

П.С. Собственно ошибка происходит тогда когда я пытаюсь полученные из матрицы данные сохранить например в другом массиве, или как в коде в файл, и именно если это происходит в dll. Чтобы обойти эту ошибку я данные сохраняю из программы c#.

Прошу помощи в раскрытии этого для меня непонятного феномена "Поврежденной памяти".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class EXPORT SomeClass {
    //...
private:
    int ncols, nrows;
    double** someData;
}
 
double& SomeClass::_H( int i, int j ) {
    return *(*(this->someData + i) + j);
}
 
void SomeClass::SaveFile( const char* strFileName ) {
    FILE *fp;
    errno_t err;
    if( err = fopen_s( &fp, strFileName, "wb") != 0 ) {
        return;
    }
    for( int i = 0; i < this->nrows; i++ ) {
        for( int j = 0; j < this->ncols; j++ ) {
            fwrite( &this->_H( i, j ), sizeof(double), 1, fp);
        }
    }
    fclose(fp);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 11:58     Обращение к double** из метода dll вызывает ошибку памяти
Посмотрите здесь:

C++ Builder Килоггер вызывает ошибку abnormal program termination
C++ Функция компилируется, но вызывает виндовс ошибку
C++ Перечисление в классе вызывает ошибку
C++ Объявление вызывает ошибку
C++ Builder Операция delete вызывает ошибку Access violation at address
C++ Шаблон класса деструктор вызывает ошибку
Деление числа пополам и умножение полученного на два вызывает ошибку C++ Builder
Выдает ошибку в функции в условии if. Не вызывает firstName, secondName и patron C++
C++ Resize вектора вызывает ошибку
Обращение к ресурсам DLL из самой DLL C++
WxFrame вызывает ошибку сегментации C++ Linux
Определить, какая функция в программе вызывает экспортируемую функцию моей dll C++ WinAPI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mgevlich
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 3
27.05.2013, 16:30  [ТС]     Обращение к double** из метода dll вызывает ошибку памяти #2
Все оказалось просто. Причина ошибки крылась совершенно в другом месте и нисколько не связна ни с С# ни с dll, а с тем, что в одном месте я просто напросто забыл удалять временно созданный буфер. Эта утечка и стала причиной не объяснимого поведения.

Вопрос закрыт.
Yandex
Объявления
27.05.2013, 16:30     Обращение к double** из метода dll вызывает ошибку памяти
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru