为什么我不能在课程

时间:2017-02-01 15:48:18

标签: c++ class opencv pointers mat

我尝试初始化类Source_Buffer中Mat的构造函数但是我给了我一个错误" ConsoleApplication4.exe中发生了缓冲区溢出,这已经破坏了程序的内部状态。按Break打开调试程序或继续终止程序。"

# include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;


class Source_Buffer {

public:
    Source_Buffer();
    int run();
private:
    const char* sffiename;
    Mat sfsrc; // this causes error
    Rect sfregion_of_interest;



};
Source_Buffer::Source_Buffer() :
sffiename("C:/ccc.jpg")
, sfsrc(imread(sffiename,0)) // and this
, sfregion_of_interest()
{

}

int Source_Buffer::run(){
    cout << "test" << endl;
    //Mat sfsrc = imread(sffiename, 0);
    sfregion_of_interest = Rect(90, 75, 250, 250);
    sfsrc = sfsrc(sfregion_of_interest);
(...)
return 0;
}

在我提取&#39; Mat sfsrc&#39;之后,它工作正常。和&#39; sffiename(&#34; C:/ccc.jpg")&#39;从类中构造函数并将它们放入main函数中。 比如Mat sfsrc = imread(sffiename, 0);

然后我想通过放置Mat sfsrc看看它是否有用;作为类成员变量的类,而不是为此调用构造函数 这就像

class Source_Buffer {

public:
    Source_Buffer();
    int run();
private:
    const char* sffiename;

    Rect sfregion_of_interest;
    Mat sfsrc;


};
Source_Buffer::Source_Buffer() :
sffiename("C:/ccc.jpg")

, sfregion_of_interest()
{

}

int Source_Buffer::run(){
    cout << "test" << endl;

    sfsrc = imread(sffiename, 0);
    sfregion_of_interest = Rect(90, 75, 250, 250);
    sfsrc = sfsrc(sfregion_of_interest);
return 0;
}

开始工作。 告诉我&#34;访问冲突写入位置0x0000000000000000。&#34;猜一些空指针的东西。 我试图搜索一些[Mat在课堂上初始化]的东西,但没有什么我能找到的。 我的想法在这里出了什么问题?

source.cpp

#include "Source_Buffer.h"
int main()
        {
            try
            {
                cout << "(1) Start !" << endl;
                Source_Buffer sfbuffer;
                cout << "(2) running entrance" << endl;
                //Source_Game source_game;
                //source_game.runc();
                sfbuffer.run();
            }
            catch (std::exception& e)
            {
                std::cout << "\nEXCEPTION: " << e.what() << std::endl;
            }
            return 0;
        }

Source_Buffer.h

#pragma once


/*bridge*/
class Source_Buffer {

public:
    Source_Buffer();
    int run();

};

0 个答案:

没有答案