使用free()和struct指针会导致程序崩溃

时间:2015-04-14 06:19:11

标签: c struct malloc free

错误:

*** Error in `./main': free(): invalid next size (fast): 0x080e1008 ***
Aborted

这是我的程序,当我尝试解除分配结构时它崩溃了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
//struct words contains a word as well as a boolean
//to check if it was used yet or not.
struct words
{
    char * word;
    int bool;
};
//the main function in which everything happens.
//the controller, if you will.
int main()
{
    struct words * word_library = malloc(9);
    struct timeval start, end;
    free(word_library);
    return 0;
}

所以这是使程序崩溃的代码:

自由(word_library);

导致它崩溃的原因是什么?如何在未来阻止这种情况?我知道每次使用malloc()都需要free()之后才能解除分配。但是,当我不使用free()时,它结束就好了,但我确定存在内存泄漏。

1 个答案:

答案 0 :(得分:4)

此:

struct words * word_library = malloc(9);

不为大小为9的struct words数组分配空间。而是分配9个字节。你需要

struct words * word_library = malloc(sizeof(struct words)*9);

分配大小为9的数组。

如果你要让它们指向字符串文字,你也不需要为word中的struct分配和释放内存。