我需要将内存分配给一个名为Locadoras的结构,并且在执行中说/dorun.sh:第71行:2692中止(内核已转储)sh“ $ {SHFILE}”。我曾在Netbeans和Codeblocks中尝试过,在C中同样的错误。 这是代码:
Main.c
Locadoras *filmes;
filmes = malloc(sizeof (Locadoras));
LerArquivoBinarioFilmes(filmes);
TransacoesFilmes.c
void LerArquivoBinarioFilmes(Locadoras *filme) {
FILE * arq;
arq = fopen("DadosLocadora.bin", "rb");
int cont = 1;
if (arq != NULL) {
while (1) {
size_t tam = fread(filme, sizeof (Locadoras), 1, arq);
if (tam < 1) {
break;
}
cont++;
realloc(filme, sizeof (Locadoras) * cont);
}
} else {
printf("error");
exit(1);
}
fclose(arq);
}
答案 0 :(得分:0)
关于:
realloc(filme, sizeof (Locadoras) * cont);
函数realloc
返回(成功时)指向新分配的内存的指针,并将先前内存的内容复制到新分配的内存中。但是,它可能会失败。如果失败,则返回NULL指针
realloc
成功时,才可以安全地从返回值中分配目标指针例如
void *temp = realloc(filme, sizeof (Locadoras) cont);
if( !temp )
{
perror( "realloc failed" );
free( filme );
exit( EXIT_FAILURE );
}
// implied else, realloc successful
filme = temp;
注意:
free()
中找到stdlib.h
perror()
中找到stdio.h
exit()
中找到stdlib.h
EXIT_FAILURE
中找到stdlib.h