如果malloc返回一个空指针,我应该释放它分配的内存吗?

zphenhs4  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(350)

假设我有一个指针,并为它分配了一些内存。如果malloc由于某种原因返回一个空指针,释放它是否被认为是一个好的实践?在这种情况下,它是否改变了一些东西?是否有必要检查malloc是否返回一个空指针?

char *some_function()
{
    char *ptr = (char *)malloc(sizeof(char) * 10);
    if (ptr == NULL)
    {
        free(ptr);
        return NULL;
    }
    //some operations with the pointer
}
fnx2tebb

fnx2tebb1#

检查malloc返回NULL是绝对必要的,因为不能将NULL用作指向内存的指针。
另一方面,free(NULL)什么也不做。(这是标准保证的。)所以如果你想做,你可以做,但绝对没有意义。如果malloc返回NULL,没有内存分配,所以没有什么可以释放。
free(NULL)法律的(并且不执行任何操作)的意义在于,它允许您在malloc返回的任何指针上调用free,这简化了资源释放:

void do_something(unsigned n) {
    int* data = malloc(n * sizeof(*data));
    if (data) {
        // Do something
    }
    else {
        sprintf(stderr, "Couldn't allocate temporary vector of %ud ints\n", n);
    }
    free(data);
}

相关问题