gpt4 book ai didi

c - 正确的选择是什么?我引用的源代码中提到了它的C。但我觉得它是

转载 作者:行者123 更新时间:2023-12-02 10:44:09 24 4
gpt4 key购买 nike

考虑以下三个C函数:

[P1]

int *g(void) {
int x = 10;
return (&x);
}

[P2]
int *g(void) {
int *px;
*px = 10;
return px;
}

[P3]
int *g(void) {
int *px;
px = (int *)malloc(sizeof(int));
*px = 10;
return px;
}

以上三个函数中的哪个可能会导致指针出现问题?

一种。只有P3
b。仅P1和P3
C。仅P1和P2
d。 P1,P2和P3

我觉得应该是 ,因为如果堆已满,则 malloc将返回空指针,P3甚至可能失败。但是,无论我在Internet上什么地方看到,到处都有它提到的选项 c 。我想听听您对此的所有意见!

最佳答案

假设问题询问可能是引起问题的原因,正确答案将是c)P1和P2。

P1返回局部变量的地址。如果该地址被取消引用(甚至读取),它将调用undefined behavior

P2取消引用未初始化的指针,这也是未定义的行为。

P3使用malloc分配内存,在该内存位置存储一个值,然后将指针返回到分配的内存。的确,如果malloc失败,这可能会导致问题,但与完全未定义的行为相比,这更可能是一个问题。

关于c - 正确的选择是什么?我引用的源代码中提到了它的C。但我觉得它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62050716/

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