battlecry [Moderador]
Número de Mensagens : 87 Idade : 35 Data de inscrição : 26/02/2008
| Assunto: heap em C ++ Qua 09 Abr 2008, 1:39 pm | |
| kon nichi wa minna ! o heap nada mais é que a memória que sobra de um programa; por exemplo : vamos dizer que você quer armazenar uma string num ponteiro ( através do operador indireto ' * ' , uma matriz também é um ponteiro só que sem esse operador ; ) ) só que você coloca um limite de 100 para essa string da forma string[99] = " Eduardo"; , se você fizer isso, ainda sobrarão 92 indíces da matriz string ou seja, a string só ocupará 7 posições ! ( 6 dos caracteres contando com o caractere '\0' ou NULL como preferirem : ) ) isso ocasionará um desperdício significativo em bytes ( já que você não terá alocado a quantidade exata de bytes para a string que você deseja) lógico, eu poderia ter colocado 7 no lugar de 99 e assim não haveria desperdício algum, porém e quando você delimita uma quantidade de " espaços " para a entrada de uma string pelo usuário ? você não saberá o tamanho da string que ele digitará, sendo assim é interessante criar uma lógica para alocar a quantidade exata de memória que será usada pela matriz String. Vamos a listagem: - Código:
-
/* " A instrução str = new char[strlen(s) + 1]; retorna um ponteiro para um bloco de memória do tamanho exato para armazenar a cadeia s mais o '\0' . A instrução str = new char; reserva um único byte de memória. " O destrutor ~String() desaloca a memória de str se esta memória já tiver sido usada por ele, para isso, é necessário saber se a memória anteriormente foi alocada para string e para isso é feita uma condição if , se a memória já tiver sido alocada o destrutor apenas terá o trabalho através do operador delete ( veja que ainda possui os colchetes por causa que estamos trabalhando com uma string ) de retirar memória. Então, com a sincronia da alocação e desalocação, tudo fica mais fácil ao tentar prever os movimentos de um usuário XD. *_* */
#include <iostream> #include <cstring> using namespace std;
class String { private: char *string; public: String() { string = new char; string = '\0'; } String(char *s) { string = new char[strlen(s) + 1 ]; /* aquisição de memória levando em consideracao o tamanho da cadeia mais NULL */ strcpy(string,s); } ~String() { if(string) delete[] string; } void Print() const { cout << string << endl; } };
int main() { String s1 = " A arvore observa com tristeza que o cabo do machado que a corta" " e feito de madeira. "; s1.Print(); system("Pause"); return 0; }
| |
|
Zed [ADM-Daniel] [Administrador]
Número de Mensagens : 87 Idade : 35 Data de inscrição : 17/02/2008
| Assunto: Re: heap em C ++ Qua 09 Abr 2008, 11:59 pm | |
| Ow, a lógica ainda estou meio por fora. Preciso logo do C pro Vista =x
Mas enquanto isso, aprendo lendo ^^" E uma coisa me despertou Isso que você falou é bem verdade, eu sempre fiquei pensando nisso em limite para string o_O Daew agora você fala que tem a solução o_o Preciso testar xP | |
|