为什么代码会停止并使用指针中止执行?

时间:2018-09-29 16:46:32

标签: c arrays file pointers realloc

我需要将内存分配给一个名为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);
}

1 个答案:

答案 0 :(得分:0)

关于:

realloc(filme, sizeof (Locadoras) * cont);

函数realloc返回(成功时)指向新分配的内存的指针,并将先前内存的内容复制到新分配的内存中。但是,它可能会失败。如果失败,则返回NULL指针

  1. 代码必须首先检查(!= NULL)返回值以确保操作成功
  2. 只有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()中找到
  1. stdlib.h
  2. perror()中找到
  3. stdio.h
  4. exit()中找到
  5. stdlib.h
  6. EXIT_FAILURE中找到
  7. stdlib.h