Does freeing an uninitialized pointer result in undefined behavior?

前端 未结 4 1326
悲&欢浪女
悲&欢浪女 2021-01-21 09:39

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){

             


        
相关标签:
4条回答
  • 2021-01-21 10:27

    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.

    0 讨论(0)
  • 2021-01-21 10:34

    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.

    0 讨论(0)
  • 2021-01-21 10:36

    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."

    0 讨论(0)
  • 2021-01-21 10:44

    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().

    0 讨论(0)
提交回复
热议问题