C ++: Вектор указателей не реагирует на изменения

У вас будет трудное время иметь дело с международными номерами с одним / простым регулярным выражением, см. этот пост о трудностях международных (и даже северных) телефонных номеров.

Вы хотите проанализировать первые несколько цифр, чтобы определить, что такое код страны, а затем действовать по-разному в зависимости от страны.

Кроме того - в списке, который вы указали, не содержится другой общий формат США - оставляя начальный 1. Большинство сотовых телефонов в США не требуют этого, и он начнет дезориентировать молодое поколение, если только они не набрали на международном уровне.

Вы правильно определили, что это сложная проблема ...

-адам

0
задан 24 March 2019 в 19:25
поделиться

1 ответ

Так не получается. После того, как вы сдвинули назад свой k2, который указывает на некоторую память, которую вы выделили, вы сохранили ее в векторе. Таким образом, у вас есть указатель, указывающий на область памяти, которая имеет 10 в нем. После присвоения k3 k2, вы только изменили переменную-указатель, чтобы указывать на другую ячейку памяти, в которой есть 100. После этого вы даже не удалите k2, вы потеряли указатель на эту память. Это называется утечкой памяти.

Вы можете изменить указатель, который вы сохранили в своем векторе. Таким образом, у вас все еще есть доступ к вашим старым данным. Я также не рекомендую перезаписывать этот указатель. Вы не получите доступ к памяти, которую вы выделили для своих данных.

struct Node
{
    Node()
    {
        visited_print = false;
        visited_find = false;
    }
    bool visited_print;
    bool visited_find;
    int value;
    std::vector<Node*> children;
    Node *parent;
};

int main(){
    Node *k1 = new Node();
    Node *k2 = new Node();
    k2->value = 10;
    Node *k3 = new Node();
    k3->value = 100;
    k1->children.push_back(k2);
    //k2 = k3;

    delete k2;
    k1->children[0] = k3;
}
0
ответ дан Celal Ergün 24 March 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: