我有这个功能的问题。此函数在需要时重新分配数组“音乐”的大小。但是当我尝试在循环中多次调用此函数时发生执行错误。它可能是内存分配问题,但我无法弄清楚。
void adicionar( Musica** music , int* cont){//adiciona uma música à playlist na posição cont.
int tam;//armazenará o tamanho do nome da música.
char *str_aux;//receberá temporariamente o nome da música.
if ((*cont) == 0){//aloca memória para o primeiro ponteiro para Musica.
music[*cont] = (Musica*) malloc( sizeof (Musica));
if( music[*cont] == NULL ){
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
}
else{//redimensiona o vetor a cada nova adição de música.
music = (Musica**) realloc( music , ((*cont) + 1) * sizeof( Musica* ));
music[*cont] = (Musica*) malloc( sizeof (Musica));
if( music == NULL ){//verifica se o realloc foi bem sucedido.
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
if( music[*cont] == NULL ){
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
printf("%0x\n",music);
printf("%d\n", music[(*cont) - 1]->tempo);
//printf("%d\n",*cont - 1);
}
str_aux = (char*) malloc( 26*sizeof(char));
printf("Musica: ");
scanf("%25[^\n]", str_aux);
fflush(stdin);
tam = strlen( str_aux );
printf("Tempo: ");
scanf("%d", &music[*cont]->tempo);
music[*cont]->nome = (char*) malloc(tam * sizeof(char));
if( music[*cont]->nome == NULL ){
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
strcpy( music[*cont]->nome , str_aux );
printf("musica adicionada.\n\n");
free( str_aux );
(*cont)++;//incrementa cont para que ele aponte para a próxima posição do vetor caso queira adicionar mais músicas.
}