C ++无法初始化指向空C ++的指针数组

时间:2018-10-08 12:46:53

标签: c++ pointers null

我正在尝试创建特里,但是当我将数组中的指针初始化为NULL时,它将破坏程序。程序完成,但不输出任何内容。为什么这样做,我看了在线示例,他们正在这样做。

class trie
    {
    private:
        struct Node
        {
            char letter;
            Node *children[26];

        };

        //the beginning of the trie
        Node *root;

    public:
        /* Constructors with No Arguments */
        trie(void);

        /* Destructor */
        ~trie(void);

        //Function to insert string into the trie.
        void insert(string word);
        //Function to help insert
        void insertHelper(string word, Node * & trieNode);
        //Funtion to print the contents of the trie.
        void printTrie();
        //Function to get the index if a char matches.
        int getIndex(char letter);
    };
    trie::trie()
    {
        /* Initialize the root of the node */
        root = NULL;
        for(int i = 0; i < 26; i++){
        root->children[i] = NULL;
        }
    }

1 个答案:

答案 0 :(得分:3)

trie::trie()
{
    root = NULL;
    for(int i = 0; i < 26; i++){
    root->children[i] = NULL;  // you are following the nullptr
    }
}

在现代C ++中,您应该使用nullptr而不是NULL。不,实际上您应该使用std::shared_ptr<>std::unique_ptr<>std::vector<>之类的智能指针。

我建议您阅读Ten Commandments for C Programmers 中的#2:

  

2:您不应遵循NULL指针,因为混乱和疯狂在其结尾等待着您。

     

很显然,这里的圣经被错误地抄写了,因为这些单词本来应该是``空指针'',以最大程度地减少空指针和宏NULL(其中更匿名)的概念之间的混淆。否则,含义很简单。空指针指向充满龙,恶魔,核心堆放物和无数其他肮脏生物的区域,如果您打扰他们的睡眠,所有这些都会在您的程序中嬉戏。尽管某些亵渎性的旧代码会无端地假定此值,但空指针不会指向任何类型的0。

此处的“跟随NULL指针”是指取消引用它。