gpt4 book ai didi

c - realloc() 一个递增的指针

转载 作者:行者123 更新时间:2023-12-05 00:25:46 24 4
gpt4 key购买 nike

  • 平台:Linux 3.2.0 x86 (Debian Wheezy)
  • 编译器:GCC 4.7.2 (Debian 4.7.2-5)

  • 我想知道如果我尝试 realloc() 一个已递增的指针会发生什么。例如
    char *ptr = NULL;
    size_t siz = 256;

    ptr = malloc(siz);

    ptr = realloc(ptr + 5, siz * 2);
    realloc()的返回值是什么?叫什么?我也知道 realloc()的文档指出传递给它的指针必须由 malloc() 返回, calloc() , 或 realloc() .我假设这意味着我不能 realloc()一个递增的指针,但我一直无法验证该假设。

    最佳答案

    这不会以任何可预测的方式工作,结果将是不确定的。您传递给 realloc 的第一个参数或 free必须由 malloc 返回, realloccalloc ,或者必须是 NULL .

    在这种情况下,ptr[5] 并非如此。 , 因为 ptr[5]未初始化。你也会得到一个编译错误或警告,因为 ptr[5]不是指针。但是即使它是一个指针(例如 char **ptr; ),它仍然是未初始化的,因此条件为假,因此结果未定义,并且很可能进程会崩溃。

    在这种情况下,ptr + 5 并非如此。要么,因为 ptr + 5不是由 malloc 返回的, realloccalloc (但 ptr 是),而不是 NULL .在这种情况下,行为未定义,很可能进程会崩溃。

    关于c - realloc() 一个递增的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24318050/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com