我正在尝试对结构内部的指针使用free,然后我对结构使用free,这似乎是正确的,但我收到了这个错误:free(): invalid next size (fast); 错误消息更大,但我认为这足以知道这是关于错误内存的。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char *nome;
char *endereco;
char *matricula;
}Estudante;
char *strAlloc( int n ){
return ( char *) malloc( n * sizeof( char * ));
}
int lineReader( char **str ){
char c;
int length = 10, strI = 0;
getchar();
*str = strAlloc( length );
while ( 1 ){
c = getchar();
if ( strI+1 == length ){
length += 10;
*str = ( char * ) realloc( *str, length * sizeof( char *));
if( *str == NULL){
printf("Faltou memoria\n");
return 0;
}
}
if ( c == '\n' ) break;
(*str)[ strI++ ] = c;
}
return strI;
}
int main(){
Estudante *alunos;
int n, length, i, j;
char *str;
char c;
printf("Digite a quantidade de alunos:\n");
scanf(" %d", &n);
alunos = ( Estudante * ) malloc( n * sizeof( Estudante * ));
for (i = 0; i < n; ++i){
printf("Digite o nome do aluno %d:\n", i+1);
length = lineReader ( &str );
alunos[ i ].nome = strAlloc( length );
strcpy( alunos[ i ].nome, str );
printf("Digite o endereço do aluno:\n");
length = lineReader ( &str );
alunos[ i ].endereco = strAlloc( length );
strcpy( alunos[ i ].endereco, str );
printf("Digite a matricula do aluno:\n");
length = lineReader ( &str );
alunos[ i ].matricula = strAlloc( length );
strcpy( alunos[ i ].matricula, str );
printf("\n");
}
free( str );
for (i = 0; i < n; ++i){
printf("Dados do aluno %d\n", i+1);
printf("Nome: %s\n", alunos[ i ].nome );
printf("Endereço: %s\n", alunos[ i ].endereco );
printf("matricula: %s\n\n", alunos[ i ].matricula );
free( alunos[ i ].nome );
free( alunos[ i ].endereco );
free( alunos[ i ].matricula );
}
free( alunos );
alunos = NULL;
return 0;
}