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:
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
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.