c++ - 为什么结构中的指针在 Visual C++ 中会出现错误,而 GCC 却不会?

标签 c++ visual-c++

我们使用下面的结构。

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

主要流程:

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

    printf("p[0]=%d\n", p[0]);
    printf("p[1]=%d\n", p[1]);

    return 0;
}

然后当我们用Visual C++编译它时,我们的进程运行它在s.p[1] = 1中发生了内存错误。

但是我们用GCC编译它是可以运行的。

为什么在VC++中会出错,而GCC却不会?

最佳答案

p[1] = 3; 的行为未定义

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

关于c++ - 为什么结构中的指针在 Visual C++ 中会出现错误,而 GCC 却不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48983804/

相关文章:

c++ - 具有 native 消息传递和非持久连接的 Microsoft Edge 扩展不起作用

编译器错误 C2059 : syntax error 'type'

c++ - Windows编程中的DLL加载

c++ - 在 OS X 上使用 MacPorts GCC 调试问题

c++ - 用于(仅)插入和迭代的适当标准容器

c++ - 没有成员函数的结构的继承

visual-c++ - 这个宏有什么作用? __success(return >= 0) long

c++ - 如何使用 Win32/WTL 实现 ListView 的缩放

windows - 关于编译器选项 "Assembly, Machine Code and Source (/FAcs)"

c++ - C++中的&&pointer或&*(pointer_to_pointer)是什么意思