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

C++

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

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

26.05.2013, 11:58. Просмотров 507. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к double** из метода dll вызывает ошибку памяти (C++):

Обращение к памяти - C++
есть процедурка замены определения символа с номером num из банка bank на символ, образ которого записан в масиве crr; void *kods(char...

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

Килоггер вызывает ошибку abnormal program termination - C++ Builder
Доброго времени суток!!! Программа перехватывает нажатие на PrintScreen. В программе есть DLL библиотека с Хуками, которая и...

Операция delete вызывает ошибку Access violation at address - C++ Builder
Доброго времени суток, уважаемые форумчане! Компьютер HP omnibook xe4100, Mobile Intel Celeron 1.14ГГц, ОЗУ 480Мб ОС Windows XP SP2....

Деление числа пополам и умножение полученного на два вызывает ошибку - C++ Builder
Добрый вечер столкнулся с такой проблемой и ни как не могу решить ее, помогите пжл Работаю в Builder C++ 6, для вывода данных...

Обращение к компоненту из метода разработаного класса - C++ Builder
На форме расположен компонент TPainBox1 есть созданный мною класс Entity1 class Entity1 {public : friend TForm3; int x; ...

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
Привет! Вот еще темы с ответами:

Подключение библиотеки вызывает ошибку "access violation" - C++ Builder
При запуске программы вылетает ошибка access violation at address 00000. Read of address 00000000. В этот момент запускаю динамическую...

double и .dll - Visual C++
Возникла проблема при использовании функий из .dll. Я написал свою dll в которой имеются ф-ии с возвращаемым значением типа double,но когда...

Обращение к DLL вызывает ошибку - C++/CLI WinForms
Есть библиотека, при обращении к ней из консольного приложения: #include &lt;iostream&gt; using namespace std; #pragma...

Обращение к массиву вызывает ошибку - C (СИ)
Есть код- #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; char alfa; int a,b,c; FILE *fp; int main() { ...


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

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

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