Чи можна звільнити пам'ять, виділену на багатовимірний масив

Я в основному маю uint64_t [8] [3] Я, однак, не потрібні всі позиції в цьому масиві. Я міг би створити іншу структуру вузлів, щоб динамічно встановлювати тільки правильні позиції, але це було б важче, тому що я покладаюся на індекси матриці для моєї конкретної програми. Як можна вибірково звільнити деякі індекси матриці.

Наприклад, я не потребую uint64_t [4] [3] або uint64_t [7] [3] для конкретного вузла, як мені це звільнити?

0
Ти не можеш. Це невеликий невикористаний простір, про який не варто турбуватися.
додано Автор R Sahu, джерело
Скоріше скористайтеся std::vector> , з неможливими нерозбірними масивами.
додано Автор πάντα ῥεῖ, джерело
Виділено один масив, він виділений. Ви повинні звільнити все це або нічого з нього, і в цьому випадку у вас є автоматичне виділення. Система вивільняє автоматичні змінні при виході з області дії. Ви не можете звільнити їх рано, але ви зможете налаштувати код, щоб зменшити область дії. Якщо ви хочете використовувати менше масиву, додайте змінну для ведення бухгалтерського обліку, щоб відстежувати потенціал.
додано Автор user4581301, джерело
Виділено один масив, він виділений. Ви повинні звільнити все це або нічого з нього, і в цьому випадку у вас є автоматичне виділення. Система вивільняє автоматичні змінні при виході з області дії. Ви не можете звільнити їх рано, але ви зможете налаштувати код, щоб зменшити область дії. Якщо ви хочете використовувати менше масиву, додайте змінну для ведення бухгалтерського обліку, щоб відстежувати потенціал.
додано Автор user4581301, джерело
Дякую всім. чому кожен коментує замість відповіді. Тепер я не можу закрити питання, не видаляючи його.
додано Автор Jon Bovi, джерело

6 Відповіді

Ви не можете звільнити його, це cpp, як це працює ...

2
додано

Ви не можете звільнити його, це cpp, як це працює ...

2
додано

Це неможливо або принаймні не так, як ви хочете. Якщо ви намагаєтеся реалізувати бінарну структуру, подібну до дерева, зверніться до двійкового дерева таким чином у вас є деревоподібна структура, де можна динамічно виділяти тільки те, що потрібно.

якщо вам все ще потрібні масиви, не використовуйте старі масиви стилів c, комітет c ++ активно оновлює стандарт з 1998 року, а сучасний спосіб роботи з масивами - за допомогою std :: масив . Якщо ви працюєте в середовищі, де ви працюєте зі старими C-API, напишіть свою логіку в сучасному c ++. песимізує код). Коли ви пишете програму, спочатку запустіть з чистим і простим дизайном, потім зробіть профілювання і зрозумійте, що йде повільно і має бути оптимізовано.

якщо вам дійсно потрібні деякі значення в масиві, щоб бути нульовими, щоб ви могли робити з ними божевільні речі (наприклад, перевірка нуля, яку я дуже перешкоджаю), вам слід обернути цілі числа в інший клас:

class Integer
{
public:
    explicit Integer(int value)
    {
        value_ = value;
    }
    Integer &operator=(Integer other)
    {
        value_ = other.value_;
    };

private:
    int value_;
};

class test
{
public:
    test()
    {
        Integer four(4);

        std::array, 2> arr = { std::make_unique(four), nullptr};
    }
};

ПРИМІТКА I: Те, що я написав вище, - це лише трюк, так що ви знаєте, що все можливо в c ++, проте складність того, що я написав для досягнення того, чого ви хотіли, має переконати вас, що його не дуже підходить для вашого простого випадку.

ПРИМІТКА II: Код не тестується, не використовуйте його, як у виробничому коді.

0
додано

Це неможливо або принаймні не так, як ви хочете. Якщо ви намагаєтеся реалізувати бінарну структуру, подібну до дерева, зверніться до двійкового дерева таким чином у вас є деревоподібна структура, де можна динамічно виділяти тільки те, що потрібно.

якщо вам все ще потрібні масиви, не використовуйте старі масиви стилів c, комітет c ++ активно оновлює стандарт з 1998 року, а сучасний спосіб роботи з масивами - за допомогою std :: масив . Якщо ви працюєте в середовищі, де ви працюєте зі старими C-API, напишіть свою логіку в сучасному c ++. песимізує код). Коли ви пишете програму, спочатку запустіть з чистим і простим дизайном, потім зробіть профілювання і зрозумійте, що йде повільно і має бути оптимізовано.

якщо вам дійсно потрібні деякі значення в масиві, щоб бути нульовими, щоб ви могли робити з ними божевільні речі (наприклад, перевірка нуля, яку я дуже перешкоджаю), вам слід обернути цілі числа в інший клас:

class Integer
{
public:
    explicit Integer(int value)
    {
        value_ = value;
    }
    Integer &operator=(Integer other)
    {
        value_ = other.value_;
    };

private:
    int value_;
};

class test
{
public:
    test()
    {
        Integer four(4);

        std::array, 2> arr = { std::make_unique(four), nullptr};
    }
};

ПРИМІТКА I: Те, що я написав вище, - це лише трюк, так що ви знаєте, що все можливо в c ++, проте складність того, що я написав для досягнення того, чого ви хотіли, має переконати вас, що його не дуже підходить для вашого простого випадку.

ПРИМІТКА II: Код не тестується, не використовуйте його, як у виробничому коді.

0
додано

Ви можете звільнити елементи в певних індексах, якщо вони динамічно виділені за допомогою delete (наприклад, видалити variableName [0] [2]), але ви не можете видалити самі індекси.

0
додано

Ви можете звільнити елементи в певних індексах, якщо вони динамічно виділені за допомогою delete (наприклад, видалити variableName [0] [2]), але ви не можете видалити самі індекси.

0
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147