当你尝试释放一个有效的堆分配的指针时,却收到“free():invalid pointer”错误,这通常意味着你尝试释放的指针并不是通过malloc()
、calloc()
或realloc()
等函数分配的内存块,或者该指针已经被释放过了。
malloc()
、calloc()
或realloc()
等函数分配的内存块。malloc()
、calloc()
或realloc()
等函数分配的内存块。以下是一个简单的示例,展示了如何正确分配和释放内存:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(sizeof(int) * 10);
if (ptr == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return 1;
}
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
for (int i = 0; i < 10; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
free(ptr);
ptr = NULL; // 将指针置为NULL,防止重复释放
return 0;
}
通过以上方法,你可以有效地避免“free():invalid pointer”错误,并确保内存管理的正确性。
领取专属 10元无门槛券
手把手带您无忧上云