首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类类型分割故障

类类型分割故障
EN

Stack Overflow用户
提问于 2015-03-10 05:37:53
回答 1查看 97关注 0票数 0

很长时间以来,我没有使用c++,而且我有一些基本错误。你能告诉我为什么我从我的通用代码中得到分割错误吗?当我使用int作为数组类型时,它工作得很好,但是当我用"Trapdoor“类型更改它时,它会给我Seg错误。

代码语言:javascript
复制
array<array<int, colN>, rowN> SmartIds::createMatrix() {
    array<array<int, colN> , rowN> a;
    for(int i = 0; i < rowN; i++) {
        a[i] = createTrapdoors();
    }
//sort(a.begin(), a.end());
    return a;
}

下面的代码生成seg错误

代码语言:javascript
复制
array<array<Trapdoor, colN>, rowN> SmartIds::createMatrix() {
    array<array<Trapdoor, colN> , rowN> a;
    for(int i = 0; i < rowN; i++) {
        a[i] = createTrapdoors();
    }
//sort(a.begin(), a.end());
    return a;
}

我称我的职能如下;

代码语言:javascript
复制
auto i = createMatrix();

Trapdoor.cpp类

代码语言:javascript
复制
#include "Trapdoor.h"
#include <cryptopp/pwdbased.h>
using namespace std;
Trapdoor::Trapdoor() {
    // TODO Auto-generated constructor stub
    key = nullptr;
    seed = nullptr;
    iv = nullptr;
    counter = 0;
}

Trapdoor::Trapdoor(byte* keyy, byte* ivv) {
    key = keyy;
    seed = keyy;
    iv = ivv;
    counter = 0;
}

Trapdoor::~Trapdoor() {
    // TODO Auto-generated destructor stub
    delete iv;
    delete key;
    delete seed;
}

void Trapdoor::deriveKeywithCounter() {
    SecByteBlock derived(32);
    PKCS5_PBKDF2_HMAC<SHA1> kdf;
    //kdf.DeriveKey(derived.data(), derived.size(), 0, (byte*)b->data(), sizeof(b), NULL, 0, 100);

    memset(iv, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
    counter++;

}

int Trapdoor::getCounter() {
    return counter;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 05:53:21

Trapdoor类没有正确的复制构造函数或复制赋值操作符.因此,当对象被值复制时,旧的和新的都会调用析构函数,指针会被释放两次等等。

让您的类在没有delete的事情上调用new很少是一个好的设计。您的代码需要明确谁负责释放内存。

通常,最好的解决方案是编写Trapdoor代码,这样它实际上根本不需要任何delete;然后您就不必编写任何特殊的函数了。见3/5/0规则。(如果您显示了类定义,我将更新这篇文章以包含一个代码示例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28956829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档