realloc 如何在 C 语言中工作?它是否设置为空释放内存引用?[复制]

How does realloc work in C? Does it set to null deallocated memory reference? [duplicate]

提问人:Luca Marchio 提问时间:2/14/2023 更新时间:2/14/2023 访问量:42

问:

当我在指针上调用 realloc 以减小其大小时,会发生什么? 例如,让我们考虑一下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int* a = malloc(4*sizeof(int));
    a[0]= 1;
    a[1]= 1;
    a[2]= 1;
    a[3]= 1;
    
    int* temp = realloc(a, 3* sizeof(int));
    if(!temp)
        exit(1);
    a = temp;
    a[3] = 10;
    return 0;
}

我希望当我调用 a = realloc(a, 3* sizeof(int));它会抛出 SIGSEGV,但事实并非如此。

C 指针 malloc realloc

评论

1赞 Eugene Sh. 2/14/2023
realloc无法将其设置为 NULL,因为它是按值传递的。
1赞 John Bollinger 2/14/2023
分段错误始终是未定义行为的表现。因此,C 语言规范从未提供任何预期段错误的基础(如果存在,则为定义行为)。在实践中,大多数 C 实现不会主动防范边界超限,因此您不能假设会检测到超限,更不用说任何特定行为都会随之而来。

答: 暂无答案