我目前正試圖釋放分配的內存,但這樣做會導致程序崩潰。我對C和編程一般都很陌生,對於遇到問題以及由於缺乏經驗可能產生的任何其他問題,我將非常樂意。免費()函數導致程序崩潰
Pool* allocatePool(int x);
void freePool(Pool* pool);
void store(Pool* pool, int offset, int size, void *object);
typedef struct _POOL
{
int size;
void* memory;
} Pool;
int main()
{
printf("enter the number of bytes you want to allocate//>\n");
int x;
Pool* p;
scanf("%d", &x);
p=allocatePool(x);
freePool(p);
return 0;
}
/* Allocate a memory pool of size n bytes from system memory (i.e., via malloc()) and return a pointer to the filled data Pool structure */
Pool* allocatePool(int x)
{
static Pool p;
p.size = x;
p.memory = malloc(x);
printf("%p\n", &p);
return &p;//return the address of the Pool
}
/* Free a memory pool allocated through allocatePool(int) */
void freePool(Pool* pool)
{
free(pool);
printf("%p\n", &pool);
}
您必須'free'您已經分配了相同的內存。你把'malloc'改爲'p.memory',但是你釋放了(&p)',它根本不是內存分配的堆,而是一個靜態對象的地址。 –
它永遠不會是導致程序崩潰的'free()'函數。它是導致程序崩潰的代碼中的一個錯誤。 – SergeyA
@SergeyA_Never_有點強。這有點像說你永遠不會被閃電擊中。確定它不太可能,但它不像malloc/free _somewhere_有任何錯誤的實現。 – Cubic