为什么结构中的指针在视觉C++中出现错误,而 GCC 没有?
why does pointer in structure occur error in Visual C++ but GCC doesn't?
我们使用下面的结构。
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 扩展。
相关文章:
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 为什么我的 for 循环给出错误:X 没有命名类型
- 编译器错误:没有合适的默认构造函数可用
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- 错误:没有匹配的成员函数来调用"push_back"
- C++天鹅座的错误;没有用于调用"std::basic_fstream..."的匹配函数
- Xcode9 领域错误 - 没有可行的重载“=”
- C++ - 错误 - 没有运算符"[]"与这些操作数匹配
- Qt4文件打开错误:没有这样的文件或目录
- CUDA 模板错误:没有与参数列表匹配的函数模板实例
- 错误:没有构造函数的实例与参数列表匹配
- 错误:没有可行的超载=
- G makefile错误: *.o:没有这样的文件或目录
- 错误:没有用于初始化和mexfunction的匹配构造函数
- 模板调用函数错误 - 没有用于调用'bubbleSort'的匹配函数
- 遍历字符* 错误没有从字符* 转换为 int
- makefile错误没有这样的文件或目录
- i686-fell-fcc createProcess错误(没有这样的文件或目录)
- Eclipse调试错误:没有此类文件或目录 n
- C++错误:没有匹配的调用函数,G++ 编译器