Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Oliveira de Lima

Erro realloc() - realloc(): invalid next size: 0x0000000000a58010 ***

Recommended Posts

Olá a todos,

 

Sou novato em c e em programação de um modo geral mas venho aprendendo algo por meio de tutoriais e apostilas. Cheguei agora em estruturas dinâmicas de dados, mais especificamente, listas.

 

Como ainda estou tentando assimilar o funcionamento das listas comecei um programinha bem básico que pede ao usuário um numero e cria uma lista com base nesse numero para depois preenche-lo. Depois ele pergunta se o usuário quer adicionar itens a lista, e ai que entra o realloc que realoca memória para o ponteiro. Meu problema começa ai, pois ele da a mensagem de erro "invalid next size".

 

Se puderem ajudar, desde já, agradeço.

 

Segue o código:

 

#include <stdio.h>

#include <stdlib.h>

 

struct no

{

int numero;

 

struct no *prox_node;

 

 

};

 

typedef struct no NODE;

 

int main()

{

 

int num,add;

 

printf("\t\tAprendendo a trabalhar com listas dinamicas\n\n");

printf("Digite um inteiro para determinar o tamanho da sua lista: ");

scanf("%d",&num);

 

num = num + 1;

 

NODE *nodes = (NODE*)malloc((num) * sizeof(NODE));

NODE *ptr = &nodes[0];

int i,j=1;

 

for(i=1;i<num;i++)

{

 

nodes.prox_node = &nodes[j];

 

 

j++;

 

 

 

}

nodes.prox_node = NULL;

 

i = 1;

 

while(nodes.prox_node != NULL)

{

printf("\nDigite um numero para preencher a lista ");

scanf("%d",&nodes.numero);

i++;

 

}

 

for(i=1;i<num;i++)

{

printf("\n%d",nodes.numero);

 

}

 

printf("\n\nDigite um valor inteiro para adicionar um numero correspondente de nodes: ");

scanf("%d",&add);

 

nodes = (NODE*)realloc(nodes,(num+add)*sizeof(NODE));

 

j=1;

 

for(i=0;i<add;i++)

{

nodes[num+i].prox_node=&nodes[j+num];

 

 

j++;

 

}

 

nodes[num+add].prox_node=NULL;

 

 

 

 

 

 

 

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C as arrays começam pelo index "0", então uma array com 5 membros tem como último index "4". Recomendo que refaça seu programa baseado nisso.

 

Mesmo assim vou explicar o erro.

 

Vamos atribuir 5 ao valor da variável "num":

Aqui ele vai alocar 6 membros sendo que o último index é 5.

NODE *nodes = (NODE*)malloc((num) * sizeof(NODE));
Depois desse loop:

for(i=1;i<num;i++)
{
	nodes[i].prox_node = &nodes[j];
	j++;
}
Quando você tenta acessar o último membro aqui:

A variável "i" vai ter valor 6, então você tenta acessar "nodes[6]" que não existe. O programa não vai apresentar erro, mas quando você tentar usar "realloc" a variável "nodes" vai estar corrompida impossibilitando a modificação de tamanho.

nodes[i].prox_node = NULL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C as arrays começam pelo index "0", então uma array com 5 membros tem como último index "4". Recomendo que refaça seu programa baseado nisso.

 

Mesmo assim vou explicar o erro.

 

Vamos atribuir 5 ao valor da variável "num":

Aqui ele vai alocar 6 membros sendo que o último index é 5.

NODE *nodes = (NODE*)malloc((num) * sizeof(NODE));
Depois desse loop:

for(i=1;i<num;i++)
{
	nodes[i].prox_node = &nodes[j];
	j++;
}
Quando você tenta acessar o último membro aqui:

A variável "i" vai ter valor 6, então você tenta acessar "nodes[6]" que não existe. O programa não vai apresentar erro, mas quando você tentar usar "realloc" a variável "nodes" vai estar corrompida impossibilitando a modificação de tamanho.

nodes[i].prox_node = NULL;

 

Obrigado pela resposta. Percebi o erro e refiz o programa sem problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.