2013Asker
2013Asker

Reputation: 2058

Does freeing an uninitialized pointer result in undefined behavior?

If you have a pointer that is not initialized and, by mistake, try to free it, is this going to result in undefined behavior?

Like:

int main(void){

    char *string;
    free(string);

    return 0;
}

Upvotes: 3

Views: 4448

Answers (4)

alk
alk

Reputation: 70901

Yes, because accessing any uninitialised variable provokes undefined behaviour.

This includes passing an uninitialise pointer tofree(). This itself also includes the case where the uninitialise pointer "by accident" may have a value equal to NULL.

Upvotes: 2

user529758
user529758

Reputation:

Yes, it does, since you should only free() a pointer that 1. is NULL or 2. you obtained via a call to malloc(), calloc() or realloc().

Upvotes: 0

ouah
ouah

Reputation: 145829

Yes, it is undefined behavior.

The pointer passed to free should be a pointer to a valid object allocated with malloc, calloc, realloc or a null pointer.

From C99:

(7.20.3.2p2) "If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by the calloc, malloc, or realloc function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined."

Upvotes: 1

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272467

Does freeing an uninitialized pointer result in undefined behavior?

Yes.

However, freeing a null pointer is well-defined.

From the C99 standard:

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by the calloc, malloc, or realloc function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.

Upvotes: 6

Related Questions