Error copying elements from a structured type vector to another vector of the same type :
At the end of the code below, I use a function to "start" all the elements of tabela2
(vector that will receive the table contents), but the prints come out "empty."
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dicionario
{
char chave[21];//string de até 20 caracteres
int* linhas;//vetor de inteiros
int tam_linhas;//tamanho do vetor acima;
}Dicionario;
void verificaAlocacao(Dicionario* tabela)
{
if(tabela == NULL)
{
printf("\nmemoria insuficiente");
exit(1);
}
}
void inicializa(Dicionario* tabela, int tam)//atribui para todos ->tam_linhas = 0;
{
int i;
for(i=0; i < tam; i++)
tabela[i].tam_linhas = 0;
}
void reallocaTabela(Dicionario* tabela, Dicionario* tabela2, int tam, int tam_antigo)
{
int i,
pos=0,
k;
char op_efetuada;//BREAK
for(i=0; i < tam_antigo; i++)
{
op_efetuada == 'N';
if(tabela[i].tam_linhas != 0)//se tam_linahs != 0
{
while(op_efetuada == 'N')
{
strcpy(tabela2[pos].chave, tabela[i].chave);//atualiza a chave
tabela2[pos].tam_linhas = tabela[i].tam_linhas;//atualiza o tamanho das linhas
tabela2[pos].linhas = (int*) malloc(tabela2[pos].tam_linhas*sizeof(int));//cria o vetor de linhas
if(tabela2[pos].linhas == NULL)//verifica alocacao
{
printf("\nmemoria insuficiente");
exit(1);
}
for(k=0; k < tabela2[pos].tam_linhas; k++)//copia elemntos do vetor de linhas
tabela2[pos].linhas[k] = tabela[i].linhas[k];
op_efetuada = 'S';
}
pos++;
}
}
}
void printTabela(Dicionario* tabela2, int tam)
{
int l,y;
for(l=0; l < tam; l++)
{
if(tabela2[l].tam_linhas != 0)
{
printf("%s",tabela2[l].chave);
printf(" - tam_linhas: %d - vetor:",tabela2[l].tam_linhas);
for(y=0; y < tabela2[l].tam_linhas; y++)
printf("[%d]", tabela2[l].linhas[y]);
printf("\n");
}
else
printf("[vazio]\n");
}
}
int main()
{
int tam=3;//tamanho da tabela
Dicionario* tabela = (Dicionario*) malloc(tam*sizeof(Dicionario));
Dicionario* tabela2;
verificaAlocacao(tabela);
inicializa(tabela, tam);
///ATRIBUI VALORES PARA TABELA
//na posicao [0]
strcpy(tabela[0].chave, "bola");//chave = bola
tabela[0].linhas = (int*) malloc(3*sizeof(int));//atualiza vetor de linhas
tabela[0].linhas[0]=0;
tabela[0].linhas[1]=1;
tabela[0].linhas[2]=2;
tabela[0].tam_linhas =3;//atualiza tam de linhas
//na posicao [2]
strcpy(tabela[2].chave, "carro");//chave = carro
tabela[2].linhas = (int*) malloc(2*sizeof(int));
tabela[2].linhas[0]=2;
tabela[2].linhas[1]=9;
tabela[2].tam_linhas =2;
///FIM
tabela2 = (Dicionario*) malloc((2*tam +1)*sizeof(Dicionario));
verificaAlocacao(tabela2);
reallocaTabela(tabela, tabela2, (2*tam +1), tam);
printTabela(tabela2,(2*tam +1));
return 0;
}
What's the problem?