Liberar memória no C++  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
lucas_carvalho100
JavaEvangelist
[Avatar]

Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline

Pessoal eu de novo com o c++....

Estou com o seguinte problema, criei um método que concatena alguns char's*, até ai tudo bem.. ele funciona blz... Vou mostrar o código....


No entanto quando eu uso ele e vou fazer mais alguma operações que exigem muita memória da um erro "bad allocation" e o programa para de funcionar... Gostaria de saber como eu poderia fazer para otimizar o código acima, ou liberar a memória ou ainda saber o que estou fazendo errado...

Agradeço a ajuda...


"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Use std::string em vez de char*. Char*, se você não souber usá-lo, é a mãe e o pai de muitos erros, principalmente os de alocação.
lucas_carvalho100
JavaEvangelist
[Avatar]

Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline

Vou mudar os parâmetros do método e posto o resultado.

Obrigado entanglement você e o VinyGodoy tem me ajudado muito. Muito obrigado.

"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

entanglement wrote:Use std::string em vez de char*. Char*, se você não souber usá-lo, é a mãe e o pai de muitos erros, principalmente os de alocação.


Tirou as palavras da minha boca. Sem falar que o std::string costuma a ter melhor performance do que o char* (eu mesmo já comprovei isso várias vezes em diversos profilings).

Procurar por um \0 no final da string é um custo extremamente alto, que todo char* paga.
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Bem-vindo ao mundo dos vazamentos de memória. Só há uma maneira de evitá-los: evitar criá-los em primeiro lugar. Uma forma é o uso de smart pointers (veja www.boost.org ) E a outra é o uso judicioso de std::string.

This message was edited 1 time. Last update was at 22/11/2010 16:52:30

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

entanglement wrote:Bem-vindo ao mundo dos vazamentos de memória. Só há uma maneira de evitá-los: evitar criá-los em primeiro lugar. Uma forma é o uso de smart pointers (veja www.boost.org ) E a outra é o uso judicioso de std::string.


É bom lembrar que meu portal, também tem artigos sobre Smart Pointers, em português:
http://www.pontov.com.br/site/index.php/cpp/43-smart-pointers/52-smart-pointer-introducao
[WWW]
lucas_carvalho100
JavaEvangelist
[Avatar]

Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline

entanglement wrote:Use std::string em vez de char*. Char*, se você não souber usá-lo, é a mãe e o pai de muitos erros, principalmente os de alocação.


Entanglement troquei para string e funcionou de primeira, a unica coisa que não consegui é concatenar as string's assim:


Quando coloco igual a cima ele da esse erro : error C2784: 'std::_String_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_iterator<_Elem,_Traits,_Alloc>' : could not deduce template argument for 'std::_String_iterator<_Elem,_Traits,_Alloc>' from 'std::string'

Agora quando faço assim:



Funciona blz... o problema que assim eu achei que ficou muito estranho, pois são várias concatenações...

To dando uma pesquisada no google para ver se eu acho o problema... Mas por enquanto ta rodando....

Obrigado pela ajuda...
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Tem coisa estranha. Para mim funciona direitinho.

 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team