Eu estava tentando praticar malloc “ing e liberar memória, no entanto, quando executo a função free () neste programa um erro é retornado para um ponteiro inválido. Alguém pode me dizer o que estou fazendo de errado?

Aqui está o erro: * Erro em `. / malloc1 “: free (): ponteiro inválido: 0x000000000216c421 * Abortado

E aqui está o meu código:

incluir

include

int main (void) {// abre um arquivo antigo ARQUIVO * old_file = fopen (“words.txt”, “r”); if (old_file == NULL) { printf (“Nenhum arquivo encontrado.”); return 1;}

//open a new file FILE* new_file = fopen("new_words.txt", "w"); if (new_file == NULL) { printf("Unable to create file."); return 2; } for (int i = 0; i < 21; i++) { char* storage = malloc(sizeof(char)); if (storage == NULL) { printf("Error."); return 3; } fread(&storage, sizeof(char), 1, old_file); fwrite(&storage, sizeof(char), 1, new_file); free(storage); } //close both files fclose(old_file); fclose(new_file); 

}

Resposta

O problema está em fread(&storage, sizeof(char), 1, old_file); Esta linha está armazenando os dados lidos diretamente no ponteiro, sobrescrevendo o endereço da memória malloc “d. Ele não está armazenando os dados na memória apontada pelo endereço armazenado no ponteiro. Quando a chamada free () é executada, ele está tentando liberar um endereço inválido. Ele também está criando um vazamento de memória porque o endereço da memória malloc “d está sendo substituído. Remova o & de fread () e fwrite () e ele funcionará.

Se isso responder à sua pergunta, clique na marca de seleção para aceitar. Vamos continuar com a manutenção do fórum. 😉

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *