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

Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.73
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
05.11.2012, 21:55     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #1
Привет, всем:-) Имеется следующий код:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
 
using namespace cv;
 
int main()
{
    // Data for visual representation
    int width = 512, height = 512;
    Mat image = Mat::zeros(height, width, CV_8UC3);
 
    // Set up training data
    float labels[4] = {1.0, -1.0, -1.0, -1.0};
    Mat labelsMat(4, 1, CV_32FC1, labels);
 
    float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    Mat trainingDataMat(4, 2, CV_32FC1, trainingData);
 
    // Set up SVM's parameters
    CvSVMParams params;
    params.svm_type    = CvSVM::C_SVC;
    params.kernel_type = CvSVM::LINEAR;
    params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
 
    // Train the SVM
    CvSVM SVM;
    SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);
 
    Vec3b green(0,255,0), blue (255,0,0);
    // Show the decision regions given by the SVM
    for (int i = 0; i < image.rows; ++i)
        for (int j = 0; j < image.cols; ++j)
        {
            Mat sampleMat = (Mat_<float>(1,2) << i,j);
            float response = SVM.predict(sampleMat);
 
            if (response == 1)
                image.at<Vec3b>(j, i)  = green;
            else if (response == -1)
                 image.at<Vec3b>(j, i)  = blue;
        }
 
    // Show the training data
    int thickness = -1;
    int lineType = 8;
    circle( image, Point(501,  10), 5, Scalar(  0,   0,   0), thickness, lineType);
    circle( image, Point(255,  10), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);
 
    // Show support vectors
    thickness = 2;
    lineType  = 8;
    int c     = SVM.get_support_vector_count();
 
    for (int i = 0; i < c; ++i)
    {
        const float* v = SVM.get_support_vector(i);
        circle( image,  Point( (int) v[0], (int) v[1]),   6,  Scalar(128, 128, 128), thickness, lineType);
    }
 
    imwrite("result.png", image);        // save the image
 
    imshow("SVM Simple Example", image); // show it to the user
    waitKey(0);
 
}
Компиляция проходит успешно, но при запуске выскакивает ошибка следующего содержания:
Необработанное исключение по адресу 0x5A06960A (opencv_highgui243.dll) в Jopa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.
Как я понимаю чтот в стеке нетак (т.к. в ассемблере шлепается на следующей строчке):
Assembler
1
771C15DE  add         esp,4
Среда разработки Visual Studio
Был бы рад любой помощи:-)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2012, 12:30     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #2
Цитата Сообщение от Lopster92 Посмотреть сообщение
Jopa.exe
Как корабль назовешь...

Отладчиком проходить по строчкам не пробовали?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.11.2012, 14:00     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #3
Цитата Сообщение от Lopster92 Посмотреть сообщение
Как я понимаю чтот в стеке нетак (т.к. в ассемблере шлепается на следующей строчке):
Код ASM
771C15DE *add * * * * esp,4
Не совсем. В результате прочи памяти бывает вылететь может из самого непредсказуемого места. Именно поэтому такие ошибки коварны.

Добавлено через 10 минут
обычно add esp, 4 это аналогично pop
если до этого в стек ничего не пихали, будет ошибка возможно
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
06.11.2012, 14:18     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #4
Если ошибка есть, то она действительно какая-то коварная. У меня код запускается (linux).

Lopster92, попробуй сначала по-отдельности закомментировать вызовы функций imwrite и imshow, а потом вместе. Всегда падает?
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
06.11.2012, 17:46  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
Если ошибка есть, то она действительно какая-то коварная. У меня код запускается (linux).

Lopster92, попробуй сначала по-отдельности закомментировать вызовы функций imwrite и imshow, а потом вместе. Всегда падает?
Падает только при записи, imwrite (( Остальное все корректно отрабатывает...

Попробовал изменить подход к записи:
C++
1
2
3
4
std::vector<int> qualityType(1);
qualityType.push_back(CV_IMWRITE_JPEG_QUALITY);
qualityType.push_back(90);
imwrite("result.jpg", image, qualityType);
Все равно падает


Добавлено через 5 минут
Цитата Сообщение от I.M. Посмотреть сообщение
Как корабль назовешь...

Отладчиком проходить по строчкам не пробовали?
Проект получил такое название после долгих и тщетных попыток)))
Пробовал, как раз на imwrite шлепается(
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
06.11.2012, 17:50     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #6
Цитата Сообщение от Lopster92 Посмотреть сообщение
Падает только при записи, imwrite (( Остальное все корректно отрабатывает...
Там, куда программа должна сохранить файл, запись возможна? Файл вообще не появляется? Что если прописать полный путь в имени файла?
В качестве библиотеки используется бинарная сборка OpenCV 2.4.3 с официального сайта?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2012, 17:53     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #7
std::vector<int> qualityType(1);

на

std::vector<int> qualityType;
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
07.11.2012, 07:06  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #8
Цитата Сообщение от grizlik78 Посмотреть сообщение
Там, куда программа должна сохранить файл, запись возможна? Файл вообще не появляется?
В качестве библиотеки используется бинарная сборка OpenCV 2.4.3 с официального сайта?
По сути возможна, т.к. я не ограничивал. Файлик появляется, но он ПУСТОЙ. Ага, с офф сайта 2.4.3...

Дебагер от imwrite перекидывает на конструкцию:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/***
*_ptiddata _getptd_noexit(void) - get per-thread data structure for the current thread
*
*Purpose:
*
*Entry:
*
*Exit:
*       success = pointer to _tiddata structure for the thread
*       failure = NULL
*
*Exceptions:
*
*******************************************************************************/
 
_ptiddata __cdecl _getptd_noexit (
        void
        )
{
    _ptiddata ptd;
    DWORD   TL_LastError;
 
    TL_LastError = GetLastError();
 
 
    if ( (ptd = __crtFlsGetValue(__flsindex)) == NULL ) {
        /*
         * no per-thread data structure for this thread. try to create
         * one.
         */
#ifdef _DEBUG
        extern void * __cdecl _calloc_dbg_impl(size_t, size_t, int, const char *, int, int *);
        if ((ptd = _calloc_dbg_impl(1, sizeof(struct _tiddata), _CRT_BLOCK, __FILE__, __LINE__, NULL)) != NULL) {
#else  /* _DEBUG */
        if ((ptd = _calloc_crt(1, sizeof(struct _tiddata))) != NULL) {
#endif  /* _DEBUG */
 
            if (__crtFlsSetValue(__flsindex, (LPVOID)ptd) ) {
 
                /*
                 * Initialize of per-thread data
                 */
 
                _initptd(ptd,NULL);
 
                ptd->_tid = GetCurrentThreadId();
                ptd->_thandle = (uintptr_t)(-1);
            }
            else {
 
                /*
                 * Return NULL to indicate failure
                 */
 
                _free_crt(ptd);
                ptd = NULL;
            }
        }
    }
 
    SetLastError(TL_LastError);
 
    return(ptd);
}
Показывает, что именно на return(ptd) краш происходит. ptd имеет пит _ptiddata, а _ptiddata это указатель на _tiddata, где _tiddata как я понял это модель структуры потока в памяти. Таким образом ошибка происходит при чтении из переменных структуры, на которую указывает (_ptiddata) ptd, а именно

_con_ch_buf 0x000000a0 <Ошибка при чтении символов строки.> unsigned char[5]
[0] <Чтение памяти невозможно>
[1] <Чтение памяти невозможно>
[2] <Чтение памяти невозможно>
[3] <Чтение памяти невозможно>
[4] <Чтение памяти

_setloc_data {pchLanguage=??? pchCountry=??? iLocState=??? ...} setloc_struct
pchLanguage <Чтение памяти невозможно>
pchCountry <Чтение памяти невозможно>
iLocState <Чтение памяти невозможно>
iPrimaryLen <Чтение памяти невозможно>
bAbbrevLanguage <Чтение памяти невозможно>
bAbbrevCountry <Чтение памяти невозможно>
_cachecp <Чтение памяти невозможно>

TL_LastError 716 unsigned long



Цитата Сообщение от grizlik78 Посмотреть сообщение
Что если прописать полный путь в имени файла?
А если прописать полный путь, но ошибок нету, но файлик все равно пустой...
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
07.11.2012, 23:50     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #9
В общем так. Добрался я до Windows XP, взял компилятор из Visual Sudio Express 2008, взял библиотеки из папки build\x86\vc9.
Скомпилировал так:
Код
cl -O2 -EHsc ocv.cpp -I .\include lib\opencv_ml243.lib lib\opencv_core243.lib lib\opencv_highgui243.lib
У меня всё работает, файл сохраняется.
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
08.11.2012, 00:28  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
В общем так. Добрался я до Windows XP, взял компилятор из Visual Sudio Express 2008, взял библиотеки из папки build\x86\vc9.
Скомпилировал так:
Код
cl -O2 -EHsc ocv.cpp -I .\include lib\opencv_ml243.lib lib\opencv_core243.lib lib\opencv_highgui243.lib
У меня всё работает, файл сохраняется.
Так у меня тоже сохранился, ток он пустой) У вас сама картинка из стандартного просмоторщика Windows открывается?

Добавлено через 11 минут
Этот код вы в консоли вбивали?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.11.2012, 07:21     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #11
Цитата Сообщение от Lopster92 Посмотреть сообщение
У вас сама картинка из стандартного просмоторщика Windows открывается?
Да, открывается стандартным просмотрщиком.

Цитата Сообщение от Lopster92 Посмотреть сообщение
Этот код вы в консоли вбивали?
Да. При этом в текущем каталоге были размещены каталоги lib и include из build\x86\vc9, а так же dll-ки из bin для запуска. Ну и файл с программой называется ocv.cpp.
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
08.11.2012, 20:49  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #12
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да, открывается стандартным просмотрщиком.


Да. При этом в текущем каталоге были размещены каталоги lib и include из build\x86\vc9, а так же dll-ки из bin для запуска. Ну и файл с программой называется ocv.cpp.
К сожалению у меня нет mspdb110.dll )))) Как я понял это не для бесплатной версии VS))
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.11.2012, 21:06     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #13
Цитата Сообщение от Lopster92 Посмотреть сообщение
К сожалению у меня нет mspdb110.dll )))) Как я понял это не для бесплатной версии VS))
А зачем? И, кстати, какая версия VS?
Библиотека mspdb*/dll это, видимо, какая-то отладочная библиотека. Она используется в отладочных версиях библиотеки opencv, в тек, которые имеют суффикс d в конце. Я линковался с релизными библиотеками.
Кстати, в моей бесплатной VS 2008 express есть mspdb80.dll, в библиотеках из папки vc9 используется именно она. В библиотеках из vc10 используется mspdb100.dll. А откуда взялась mspdb110.dll?
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
09.11.2012, 16:01  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #14
Цитата Сообщение от grizlik78 Посмотреть сообщение
А зачем? И, кстати, какая версия VS?
Библиотека mspdb*/dll это, видимо, какая-то отладочная библиотека. Она используется в отладочных версиях библиотеки opencv, в тек, которые имеют суффикс d в конце. Я линковался с релизными библиотеками.
Кстати, в моей бесплатной VS 2008 express есть mspdb80.dll, в библиотеках из папки vc9 используется именно она. В библиотеках из vc10 используется mspdb100.dll. А откуда взялась mspdb110.dll?
У меня VS 2012 Express. Ввел в консоли то, что вы предложили из директории с файлом cl.exe , в результате ругается на mspdb*/dll
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
11.11.2012, 01:44  [ТС]     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #15
Короче, всем спасибо за ответы! В особенности, grizlik78))
Постараюсь сам разобраться дальше... Отпишусь если решу проблему
Khludenkov
31 / 25 / 4
Регистрация: 30.04.2014
Сообщений: 377
30.05.2016, 08:26     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #16
Здравствуйте. Дабы не плодить тем, напишу здесь.

Есть VS2010. И OpenCV2.4.9.
Подключаю файлы как на картинках.
Миниатюры
Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу"   Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу"   Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу"  

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2016, 08:54     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу"
Еще ссылки по теме:

C++ Нарушение прав доступа при чтении по адресу 0xFFFFFFB8
Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу C++
C++ Нарушение прав доступа при чтении по адресу

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

Или воспользуйтесь поиском по форуму:
Khludenkov
31 / 25 / 4
Регистрация: 30.04.2014
Сообщений: 377
30.05.2016, 08:54     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" #17
Пишет, что не найден файл opencv_imjproc.

Подскажите, как правильно надо сделать.

Добавлено через 26 минут
Скопировал напрямую все требуемые dll в директорию разработки. Спасибо, работает.
Yandex
Объявления
30.05.2016, 08:54     Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу"
Ответ Создать тему
Опции темы

Текущее время: 22:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru