Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Alocaçao De Memoria (acho)


Guest DarkLotus

Pergunta

Guest DarkLotus

Olá pessoal. Então, estou com um problema bem estranho. Estou fazendo um programa pra acelerar meu trampo aqui, e ele está dando alguns problemas.

Resumindo, eu criei algumas variáveis char* (ponteiros) pra guardar strings, usando a função malloc. Aloquei 10000 bytes de memória em todas (um exagero mas vocês entenderão mais tarde porque). Testei com NULL pra ter certeza que a alocação foi feita com sucesso e não houve problemas em nenhuma.

Agora a questão é a seguinte: eu aloquei uma certa string numa variável dessas e em mais nenhum ponto do programa mexo nela, apenas uso printfs para saber o valor atual da variável. E fico variando outra. O que acontece é que se eu passar de 3 caracteres, esses caracteres adicionais começam a invadir a primeira string.

Exemplo: uma variável string 1 contém "joao". Essa variável fica fixa. Outra variável 2 é feita variar. Quando é atribuído "tio" a essa string e mando imprimir o conteúdo da primeira ela está intacta. Mas se atribuo "vovo" a string 2, o conteúdo da primeira simplesmente desaparece. Se eu atribuo uma string "primo", o conteudo da primeiro fica sendo "o". Se atribuo "1234qdiabosestaacontecendo" o conteudo da segunda passa a ser "que diabosestaacontecendo". Parece que o compilador ignorou minha ordem de alocar 100 ou 1000 ou qualquer valor no malloc e está alocando 4 bytes e o resto invade a outra string.

Vários outros problemas ocorrem no programa, também relacionados a "invasão" de strings e arquivos, por exemplo, criei um arquivo para escrita (fopen "w") e o conteudo de uma outra sting invade meu arquivo. Mas acredito que se alguém me solucionar este problema consigo solucionar os outros.

Lembrando que declarei os chars como ponteiros e usei malloc para alocar bytes de memória, por exemplo, char *string e string = malloc(100*sizeof(char)). Fiz testes de NULL e não houve falhas. Usei o compilador lccwin32.

Outro problema que não tem a ver com esse é, eu preciso fazer de uma string que contém alguns caracteres ficar vazia. Entre minhas tentativas, tentei:

string = "";

string = "\";

free(string); string=malloc(...);

E nenhuma funcionou..

Só não posto o código porque ele está um pouco grande, e iria prejudicar a página. Mas hospedei no rapidshare, se alguém quiser baixar pra analisar. Podem achar aqui:

http://rapidshare.com/files/23031684/geratarefas3.c.html

Alguém pode me ajudar?

Obrigado antecipadamente.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Lembrando que declarei os chars como ponteiros e usei malloc para alocar bytes de memória, por exemplo, char *string e string = malloc(100*sizeof(char)). Fiz testes de NULL e não houve falhas. Usei o compilador lccwin32.

a sintaxe do malloc está errada

voce deve falar pra ele que tipo de espaço será reservado para a variável.

str1 = (char *) malloc (100*sizeof(char));

reserva 100 tamanhos de caracteres para essa variável.

Link para o comentário
Compartilhar em outros sites

  • 0

poste a parte do seu codigo que faz as alocacoes de memoria e atribuicoes pra gente ter algo para analizar. Fica bem mais facil de encontrar o erro se tivermos o codigo. O que esta acontecendo parece ser um "overlap" dos seus vetores, o que indica que a alocacao não esta sendo feita de forma correta (não costuma ser um problema do malloc e sim da forma como esta sendo usado). Geralmente isso acontece por alocar tamanhos errados para o vetor, mas pelo que voce disse pode não ser isso.

E Kandrade, a sintaxe do malloc não esta errada, por que como em C os tipos primitivos são fracos, atribuicoes desse tipo não são erros. O padrão ANSI de C aceita, mas gera um warning. Mesmo assim a atribuicao é feita de forma correta.

Editado por Jonas de Abreu
Link para o comentário
Compartilhar em outros sites

  • 0
E Kandrade, a sintaxe do malloc não esta errada, por que como em C os tipos primitivos são fracos, atribuicoes desse tipo não são erros. O padrão ANSI de C aceita, mas gera um warning. Mesmo assim a atribuicao é feita de forma correta.

realmente, voce tem razão não há erro em alocar um espaco apontado por void.

Porém só pode armazenar endereços de memória em ponteiro void.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...