free出错

void free(void *ptr)

Description

The C library function void free(void *ptr) deallocates the memory previously allocated by a call to calloc, malloc, or realloc. 务必牢记,该函数释放的是指针指向的内存空间,而不是释放掉指针。

Example

struct DetectRes
{
    float x_start;
};

int main()
{
	struct DetectRes *objects;
	objects = (struct DetectRes*)malloc(3 * sizeof(struct DetectRes));
    
    for (int i = 0; i < 3; i++)
    {
        objects->x_start = i + 1;
        objects++;
    }
	
	free(objects);
	objects = NULL;
	
	return 0;
}

上述代码是会出现错误的,即使在malloc的时候分配比 3 * sizeof(struct DetectRes) 更大的空间也于事无补。原因在于在使用
free() 的时候,objects指针已经不指向原来的位置了。

对与 free() 出错,一般是下列几种情况:

  • 1、malloc 与 free 配套使用,不要跨进程分配和释放。
  • 2、指向 malloc 申请的堆内存的指针,在运用过程中千万不要另外赋值,否则同样导致内存泄露。
  • 3、使用 malloc 后,实际使用时指针长度超过了你申请的范围,再使用 free 时肯定是会出问题的。
  • 4、改变指针的初始指向地址。(上述代码的错误)

你可能感兴趣的:(C语言,开发语言,c++,linux)