Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
mgevlich
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 3
#1

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

26.05.2013, 11:58. Просмотров 543. Ответов 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);
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 11:58
Ответы с готовыми решениями:

Обращение к памяти
есть процедурка замены определения символа с номером num из банка bank на...

Прямое обращение к памяти
Доброго всем времени суток. Товарищи, помогите пожалуйста найти литературу для...

Килоггер вызывает ошибку abnormal program termination
Доброго времени суток!!! Программа перехватывает нажатие на PrintScreen. В...

Операция delete вызывает ошибку Access violation at address
Доброго времени суток, уважаемые форумчане! Компьютер HP omnibook xe4100,...

Деление числа пополам и умножение полученного на два вызывает ошибку
Добрый вечер столкнулся с такой проблемой и ни как не могу решить ее, помогите...

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

Вопрос закрыт.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 16:30

Обращение к компоненту из метода разработаного класса
На форме расположен компонент TPainBox1 есть созданный мною класс Entity1...

Подключение библиотеки вызывает ошибку "access violation"
При запуске программы вылетает ошибка access violation at address 00000. Read...

double и .dll
Возникла проблема при использовании функий из .dll. Я написал свою dll в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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