Malloc?

6 respostas
C

Boas… tenho algumas duvidas acerca da funcionalidade de malloc, sei que é uma alocaçao dinamica na memoria mas nao compreendo bem o seu funcionamento.

Malloc permite me por exemplo guardar um programa feito por mim na memoria e depois procura lo?

6 Respostas

ViniGodoy

Não. Ele faz alocação de memória RAM. Ou seja, de memória volátil.

Quando vc faz:
int x* = (int*) malloc(12);

Você está alocando 12 bytes, e passando o valor do ponteiro para o primeiro byte para x.

Como esse ponteiro é entendido como um int*, a leitura será feita de 4 em 4 bytes (um int tem 4 bytes).

Ou seja:

x[0] --> Dá o valor inteiro do primeiro byte
x[1] --> Dá o valor inteiro do segundo byte
x[2] --> Dá o valor inteiro do terceiro byte

Quando vc cria variáveis sem o malloc, elas são criadas apenas na pilha, e tem escopo local, na função onde foram declaradas. Com malloc, a memória é reservada no heap, que e seu conteúdo ficará lá até que um free seja dado.

C

hum tou a perceber, não é isso que pretendo. Quero fazer um jogo tipo palavras cruzadas e quero guardar a matriz de maneira que o user procure a matriz atraves da linha de comandos para que depois o programa avaliar o que o user da como resultado para avaliar se ta certo ou nao. Tenho a ligeira sensaçao de que era a linguagem C que permitia ‘endereçar’ especificamente para depois ir la buscar. Saberia dizer me alguma dica por favor?

E

Antigamente (acho que no tempo em que você nem era nascido), em alguns programas em C (tipicamente jogos), costumava-se declarar uma struct gigante contendo todas as variáveis globais do programa (tipicamente níveis e pontos) para que ela fosse salva em um único arquivo.
Não é preciso dizer que isso era usado tipicamente para jogos, em que você não tinha atualizações, service packs e outras coisas que poderiam deixar os dados de versões anteriores do programa completamente incompatíveis com versões mais recentes.
Um jogo em que isso era feito era o Doom.
Dica: não faça isso. É um modo muito antigo de pensar (salvar as variáveis globais do jeito que estão em um arquivo). Só era feito em jogos, por causa dessas coisas que eu listei.

C

humm isso nao sabia, obrigada! acho que atraves de manipulaçao de ficheiros, li um post sobre um ‘fopen’ que penso que vai servir.

agradeço pelo tempo que dispensaram, cumps

E

Bom - uma forma simples de salvar informações em arquivos é em arquivos-texto.
Se for em C, você pode usar os métodos fopen/fclose/fgets/fputs . Dá um pouco de trabalho mas nada que não possa ser feito com várias linhas de código.

Se você estiver criando um programa que só vai rodar em Windows e as informações podem ser guardadas como strings, pode usar arquivos .ini e usar as APIs WritePrivateProfileString / GetPrivateProfileString ( veja http://msdn.microsoft.com/en-us/library/ms725501(VS.85).aspx e http://msdn.microsoft.com/en-us/library/ms724353(v=VS.85).aspx ).

Se quiser usar XML e C++, pode usar a biblioteca Xerces ( http://xerces.apache.org/xerces-c/ ). Sempre é bom saber usar a Xerces, ela pode ser muito útil para você.

C

hum descobri varias coisas atraves dos links, agradeço novamente.
Decidi aplicar os metodos fopen (:

Criado 28 de outubro de 2010
Ultima resposta 7 de nov. de 2010
Respostas 6
Participantes 3