为什么结构中的指针在视觉C++中出现错误,而 GCC 没有?

why does pointer in structure occur error in Visual C++ but GCC doesn't?

本文关键字:错误 没有 GCC C++ 结构 指针 为什么 视觉      更新时间:2023-10-16

我们使用下面的结构。

struct  S
{
    int i;
    int *p;
};

主要过程:

int main()
{
    S s;
    int *p = &s.i;
    p[0] = 4;
    p[1] = 3;
    printf("p[0]=%dn", p[0]);
    printf("p[1]=%dn", p[1]);
    s.p = p;
    s.p[0] = 1;
    s.p[1] = 2;
    printf("p[0]=%dn", p[0]);
    printf("p[1]=%dn", p[1]);
    return 0;
}

然后,我们的过程运行它发生在 s.p [1] = 1 中时发生的内存错误。

,但是当我们用GCC编译时,它可以运行。

为什么在VC 中发生错误,但GCC没有发生?

p[1] = 3;的行为是不确定的

p不是指向至少两个元素的数组。

在此语句中:

int* p = &s.i;

您正在用一个对象的地址而不是数组初始化指针p。但是有:

p[1] = 3;

和:

s.p[1] = 2;

您正在尝试设置某些第二个数组元素的值,但是没有数组可以开始。这会导致不确定的行为。

说您在main内的p与班级内的int* p数据成员无关。这也不太可能与GCC一起使用,因为_tmain是Microsoft Visual C 扩展。