【问题标题】:C language. free() and changed pointer [duplicate]C语言。 free()并更改了指针[重复]
【发布时间】:2015-04-08 09:38:16
【问题描述】:

如果我按以下方式更改指针,free() 会正常工作吗?

ar_byte_100=calloc(100,1);
ar_byte_100=&((unsigned long int*)ar_byte_100)[50];
free(ar_byte_100);

【问题讨论】:

  • 不(或者可能因为它调用 UB)。你必须给freecalloc返回的指针。
  • 一个类似的问题,关于 C++ 而不是 C:stackoverflow.com/q/29192430/4200092
  • @GoBusto 恕我直言,这里不需要C++,很多C 骗子已经在那里了。 :-)

标签: c free


【解决方案1】:

没有。

您必须将malloc()calloc() 返回的确切指针传递给free()

【讨论】:

    【解决方案2】:

    按照标准free(ptr)

    ptr 应该是由malloc() calloc()realloc() 返回的指针,除此之外的任何内容都是未定义的行为。

    【讨论】:

    • 我可以realloc(ar_byte_100, 0); ar_byte_100=&((unsigned long int*)ar_byte_100)[-50];realloc(ar_byte_100, 0);吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多