Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中的浮点异常_C++ - Fatal编程技术网

C++中的浮点异常

C++中的浮点异常,c++,C++,以下Trie实现的代码在调用函数insert时引发浮点异常。for循环中检查现有节点的行就是问题所在 struct Node { char c; bool isend; unordered_map<int, struct Node*> map; }; void insert(struct Node* root, string contact) { int size = contact.size(); char ch; for (in

以下Trie实现的代码在调用函数insert时引发浮点异常。for循环中检查现有节点的行就是问题所在

struct Node {
    char c;
    bool isend;
    unordered_map<int, struct Node*> map;
};

void insert(struct Node* root, string contact) {
    int size = contact.size();
    char ch;

    for (int i = 0; i < size; i++) {
        ch = contact[i];
        // this check is creating problem
        if (root->map.find(ch) == root->map.end()) {
            struct Node* tmp = (struct Node*) malloc(sizeof(struct Node));
            tmp->c = ch;

            if (i == (size - 1)) {
                tmp->isend = true;
            } else {
                tmp->isend = false;
            }

            root->map.insert(make_pair(ch, tmp));
            root = tmp;            
       } else {
          root = root->map[ch];   
        }         

    }
}

int main()
{
    struct Node* root = NULL;

    root = (struct Node*) malloc(sizeof(struct Node));

    insert(root, "text");
}

<是否有帮助?

< P>不要在C++代码中使用MALLC,除非你真正知道你在做什么
root = new Node;

问题是,由于使用malloc,因此没有调用Node::map的构造函数。使用new将确保调用所有必需的构造函数。

当您使用malloc时,您不是在调用节点类构造函数,而是在分配内存

改用new,它将分配内存并调用构造函数。因此:

struct Node* tmp = (struct Node*) malloc(sizeof(struct Node));
应该是:

Node* tmp = new Node();
Node* root = new Node();
以及:

应该是:

Node* tmp = new Node();
Node* root = new Node();
记住在适当的地方删除。或者更好,使用。
最重要的是避免在类中使用C。使用适当的标准C++。

是否尝试使用调试器来捕捉崩溃,然后在代码中找到精确的行?请先这样做。你确定这段代码有浮点异常吗?在它的任何地方都没有浮点。哦,停止使用C++的代码,像C++一样的Maloc。C++不是类的C。请正确学习C++,在标准C++中使用MALOC是不寻常的。除非你是一个库实现者。不管弹出的错误怎么说,这段代码并没有抛出浮点异常。出了点问题,操作系统正在猜测这个问题。内存损坏通常以浮点异常的形式报告,即使它与浮点无关,也没有抛出任何内容。因此,将该错误消息视为某些内容已损坏;没什么了。Node的隐式构造函数调用Node::map构造函数。谢谢你的帮助。它解决了这个问题。