Engenharia da Computação
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Engenharia da Computação

Fórum de toda Engenharia da Computação da UNIG
 
InícioPortalProcurarÚltimas imagensRegistarEntrar

 

 heap em C ++

Ir para baixo 
2 participantes
AutorMensagem
battlecry
[Moderador]
battlecry


Número de Mensagens : 87
Idade : 35
Data de inscrição : 26/02/2008

heap em C ++ Empty
MensagemAssunto: heap em C ++   heap em C ++ Icon_minitimeQua 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. alien 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;           
}           
           
Ir para o topo Ir para baixo
Zed [ADM-Daniel]
[Administrador]
Zed [ADM-Daniel]


Número de Mensagens : 87
Idade : 35
Data de inscrição : 17/02/2008

heap em C ++ Empty
MensagemAssunto: Re: heap em C ++   heap em C ++ Icon_minitimeQua 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
Ir para o topo Ir para baixo
https://unigengcom.forumeiros.com
 
heap em C ++
Ir para o topo 
Página 1 de 1

Permissões neste sub-fórumNão podes responder a tópicos
Engenharia da Computação :: Extra-Classe :: Programação e Códigos :: C, C++-
Ir para: