| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:15:56
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:30:39
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:36:39
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:43:46
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:51:52
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2010 16:55:56
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/11/2010 14:41:55
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/11/2010 15:24:37
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Tem coisa estranha. Para mim funciona direitinho.
|
|
|
 |
|
|
|
|