将 free() 与结构指针一起使用会使程序崩溃
using free() with a struct pointer makes program crash
错误:
*** 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() 时它结束得很好,但我确定存在内存泄漏。
这个:
struct words * word_library = malloc(9);
不会为大小为 9 的 struct words
数组分配 space。相反,它分配了 9 个字节。你需要
struct words * word_library = malloc(sizeof(struct words)*9);
分配大小为 9 的数组。
如果要使 struct
中的 word
指向字符串文字,则也不需要为它们分配和释放内存。
错误:
*** 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() 时它结束得很好,但我确定存在内存泄漏。
这个:
struct words * word_library = malloc(9);
不会为大小为 9 的 struct words
数组分配 space。相反,它分配了 9 个字节。你需要
struct words * word_library = malloc(sizeof(struct words)*9);
分配大小为 9 的数组。
如果要使 struct
中的 word
指向字符串文字,则也不需要为它们分配和释放内存。