正确的选项是什么?在我提到的资料中提到了C。但我觉得是D

问题描述 投票:0回答:1

考虑以下三个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;
}

以上三个函数中,哪一个容易导致指针出现问题?

a. 只有P3 b. 只有P1和P3 c. 只有P1和P2 d. P1、P2和P3。

我觉得应该是 d 因为如果堆满了, malloc 会返回一个空指针,P3甚至会失败。但后来我在网上看到,无论在哪里,凡是提到它的选项 c. 我想听听大家的意见!

c pointers compiler-errors malloc runtime-error
1个回答
3
投票

鉴于问题问的是哪个是 可能 以引起问题,正确答案应该是c)P1和P2。

P1返回一个局部变量的地址。 如果该地址被解除引用(甚至被读取),它将调用 未定义行为.

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

P3用 malloc,在该内存位置存储一个值,并返回分配到内存的指针。 虽然这确实可能会导致一个问题,如果 malloc 失败,比起直接的未定义行为,它更不可能是一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.