小编sop*_*sop的帖子

在构造函数c ++中抛出异常

我创建了一个类,如果一个成员为空,我不想创建该对象.这些是代码行:

#include "verification/CVerifObj.hpp"

VerifObj::VerifObj(const fs::path& imgNameIn)
{
    m_image = cv::imread(imgNameIn.string());
    AnalyseCSV csv;
    m_plateContour = csv.getPlateRegion(imgNameIn); // search for the csv file and load the values
    if (m_plateContour.empty()) // throw exception if empty csv
    {
        throw EmptyContourException(imgNameIn.string());
    }
    m_imageName = imgNameIn.string();
}

VerifObj::~VerifObj()
{
    // are these enough for destructor?
    m_image.release();
    m_plateContour.clear();
}
Run Code Online (Sandbox Code Playgroud)

这样可以,还是我会做更多的事情?如果抛出异常,我怎么能确定没有创建对象?

我有以下几行代码来确保它:

for(fs::directory_iterator iter(folderIn); iter != end; ++iter)
{
    if(!fs::is_regular_file(iter->status()))
    {
        continue;
    }
    std::string extension = iter->path().extension().string();
    if(targetExtensions.find(extension) == targetExtensions.end()) 
    { 
        continue;
    }
    try
    {
        VerifObj verifObj(iter->path());
        verifObjVecRet.push_back(verifObj); …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
2919
查看次数

运行良好,但在完成之前崩溃

我用C++编写了一个带有OpenCV和boost的应用程序,它运行良好且正确,但在退出之前崩溃(如果我一步一步调试,它return 0;在main结束时崩溃)说:

  • 在kdevelop中:

    *** Error in `/home/xxx/git_repos/my_proj/build/my_proj': free(): invalid pointer: 0x00000000008939c0 ***
    *** Crashed with return code: 0 ***
    
    Run Code Online (Sandbox Code Playgroud)
  • 在命令行中:

    *** Error in `./my_proj': free(): invalid pointer: 0x00000000008939c0 ***
    Aborted (core dumped)
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果我使用gdb:

    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    *** Error in `/home/xxx/git_repos/my_proj/build/plate_info_extractor': free(): invalid pointer: 0x00000000008939c0 ***
    
    Program received signal SIGABRT, Aborted.
    0x00007ffff5b83cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    
    Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?我无法弄清楚出了什么问题.


我已经评论了一些代码部分,似乎问题出现在我用来记录错误/信息的代码中......所以:

#include "CLogger.hpp"

static void help(const std::string& …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu boost

1
推荐指数
1
解决办法
485
查看次数

如何获取按位而不是数字但不否定符号位?

我有一个代表掩码的数字,我想获得负面具(0110,即6).我想按位做但不是它似乎也否定了符号位,我得到了一个不需要的值...

size_t msk = 9; // that is 1001, or 000...01001 on more bits
size_t nMsk = ~msk; // this I want to be 6, that is 0110, but bitwise not  
                    // is negating all the bits, so I get 111...10110
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法(没有循环)?

编辑 更多信息:

我在其中一个答案的一些评论中添加了一些更好的案例:在我的情况下,16是100000000而~16不是111011111111,而是000011111111

c c++

1
推荐指数
1
解决办法
191
查看次数

git 分支来自分支而不是来自 master

我已经从另一个相邻分支而不是主分支创建了一个相邻分支。我已添加更改并推送。现在我看到它就像

*   master commit update readme (this is how I have noticed it)
| * adj_br_2 commit blahblah
| * adj_br_1 commit blah
|/
*   master commit blblbl
Run Code Online (Sandbox Code Playgroud)

现在我想从 master 创建第二个分支而不是从第一个分支。

*   master commit update readme (this is how I have noticed it)
| * adj_br_2 commit blahblah
|/
| * adj_br_1 commit blah
|/
*   master commit blblbl
Run Code Online (Sandbox Code Playgroud)

有没有办法在不清除和重新创建分支的情况下做到这一点?事实上我需要一种快速的方法来修复它。有什么建议么?

git

0
推荐指数
1
解决办法
2303
查看次数

标签 统计

c++ ×3

boost ×1

c ×1

git ×1

ubuntu ×1