É possível liberar memória alocada para array multidimensional

Eu basicamente tenho um uint64_t [8] [3] Eu, no entanto, não preciso de todas as posições nesta matriz. Eu poderia criar outra estrutura de nó para definir dinamicamente apenas as posições apropriadas, mas seria mais difícil porque eu confio em os índices de matriz para o meu programa particular. Como posso liberar seletivamente alguns índices da matriz?

Por exemplo, eu não preciso de uint64_t [4] [3] ou uint64_t [7] [3] para um nó em particular, como faço para liberar isso?

0
Você não pode. É uma pequena quantidade de espaço não utilizado que não vale a pena se preocupar.
adicionado o autor R Sahu, fonte
Em vez disso, use um std :: vector > , com matrizes brutas que não é possível.
adicionado o autor πάντα ῥεῖ, fonte
Um um array é alocado, é alocado. Você tem que liberar tudo isso ou nada disso, e nesse caso você tem uma alocação automática. O sistema libera variáveis ​​automáticas quando elas saem do escopo. Você não pode liberá-los antes, mas poderá ajustar o código para reduzir o escopo. Se você quiser usar menos de uma matriz, adicione uma variável de manutenção de registros para controlar a capacidade.
adicionado o autor user4581301, fonte
Um um array é alocado, é alocado. Você tem que liberar tudo isso ou nada disso, e nesse caso você tem uma alocação automática. O sistema libera variáveis ​​automáticas quando elas saem do escopo. Você não pode liberá-los antes, mas poderá ajustar o código para reduzir o escopo. Se você quiser usar menos de uma matriz, adicione uma variável de manutenção de registros para controlar a capacidade.
adicionado o autor user4581301, fonte
Obrigado a todos. Por que todo mundo comentou em vez de responder? Agora não consigo fechar a questão sem excluí-la.
adicionado o autor Jon Bovi, fonte

6 Respostas

Você não pode liberar, é cpp, é assim que funciona ...

2
adicionado

Você não pode liberar, é cpp, é assim que funciona ...

2
adicionado

Isso não é possível ou, pelo menos, não do jeito que você quer. Se você está tentando implementar uma estrutura binária em forma de árvore, dê uma olhada em árvore binária Desta forma, você tem estrutura de árvore onde você poderia alocar apenas o que você precisa dinamicamente.

Se você ainda precisa de arrays, não use arrays de estilo c antigos, o comitê c ++ tem atualizado ativamente o padrão desde 1998 e a maneira moderna de trabalhar com arrays é usar std :: array . Se você estiver trabalhando em um ambiente onde você está trabalhando com APIs antigas, escreva sua lógica em um c ++ moderno. biblioteca estática compilá-lo e vinculá-lo a essa biblioteca em sua C-API.

Dito isto Se você está preocupado com problemas de desempenho ou memória, deve reconsiderar sua maneira de pensar, muitos desenvolvedores jovens se envolvem nesse padrão de pensamento e acabam escrevendo códigos que não são nem rápidos nem elegantes em termos de design. chamado pessimizando o código). Quando você escreve um programa, primeiro comece com um design legível e simples, faça o perfil e descubra o que é lento e deve ser otimizado.

Se você realmente precisa que alguns dos valores na matriz sejam nulos, então você pode fazer coisas malucas com ele (como a verificação nula, que eu seria altamente desencorajador). Você deve envolver inteiros em outra classe:

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};
    }
};

NOTA I: O que eu escrevi acima é apenas um truque, então você sabe que tudo é possível em c ++, mas a complexidade do que acabei de escrever para alcançar o que você queria, deveria convencê-lo de que não é uma boa abordagem para o seu caso simples.

OBSERVAÇÃO II: O código não é testado, não use isso como está no código de produção.

0
adicionado

Isso não é possível ou, pelo menos, não do jeito que você quer. Se você está tentando implementar uma estrutura binária em forma de árvore, dê uma olhada em árvore binária Desta forma, você tem estrutura de árvore onde você poderia alocar apenas o que você precisa dinamicamente.

Se você ainda precisa de arrays, não use arrays de estilo c antigos, o comitê c ++ tem atualizado ativamente o padrão desde 1998 e a maneira moderna de trabalhar com arrays é usar std :: array . Se você estiver trabalhando em um ambiente onde você está trabalhando com APIs antigas, escreva sua lógica em um c ++ moderno. biblioteca estática compilá-lo e vinculá-lo a essa biblioteca em sua C-API.

Dito isto Se você está preocupado com problemas de desempenho ou memória, deve reconsiderar sua maneira de pensar, muitos desenvolvedores jovens se envolvem nesse padrão de pensamento e acabam escrevendo códigos que não são nem rápidos nem elegantes em termos de design. chamado pessimizando o código). Quando você escreve um programa, primeiro comece com um design legível e simples, faça o perfil e descubra o que é lento e deve ser otimizado.

Se você realmente precisa que alguns dos valores na matriz sejam nulos, então você pode fazer coisas malucas com ele (como a verificação nula, que eu seria altamente desencorajador). Você deve envolver inteiros em outra classe:

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};
    }
};

NOTA I: O que eu escrevi acima é apenas um truque, então você sabe que tudo é possível em c ++, mas a complexidade do que acabei de escrever para alcançar o que você queria, deveria convencê-lo de que não é uma boa abordagem para o seu caso simples.

OBSERVAÇÃO II: O código não é testado, não use isso como está no código de produção.

0
adicionado

Você pode liberar os elementos em certos índices se eles forem alocados dinamicamente usando delete (por exemplo, delete variableName [0] [2]), mas você não poderá remover os índices.

0
adicionado

Você pode liberar os elementos em certos índices se eles forem alocados dinamicamente usando delete (por exemplo, delete variableName [0] [2]), mas você não poderá remover os índices.

0
adicionado