c – 成员的初始化:GCC中的错误还是我的想法?
发布时间:2020-12-16 06:55:05 所属栏目:百科 来源:网络整理
导读:我在我班级的私人部分定义了一个枚举类型.我也定义了这种类型的成员.当我尝试在构造函数体中初始化此成员时,我在运行时遇到内存损坏问题.当我通过相同构造函数中的初始化列表初始化它时,我不会遇到内存损坏问题.难道我做错了什么? 我将简化代码,如果它是一
我在我班级的私人部分定义了一个枚举类型.我也定义了这种类型的成员.当我尝试在构造函数体中初始化此成员时,我在运行时遇到内存损坏问题.当我通过相同构造函数中的初始化列表初始化它时,我不会遇到内存损坏问题.难道我做错了什么?
我将简化代码,如果它是一个GCC错误,我确信它是我正在组合/继承/等的特定类的组合,但我保证这会抓住问题的本质.在初始化之前,没有任何东西使用这个成员变量,并且在完全构造之前,没有任何东西使用新创建的对象.这个成员的初始化确实是我在体内做的第一件事,当内存损坏发生时,valgrind说它在我初始化变量的行上. Valgrind说它是4号的无效写. 相关标题代码: private: enum StateOption{original = 0,blindside}; StateOption currentState; 相关的.cpp代码(导致内存损坏和崩溃): MyClass::MyClass(AClass* classPtr) : BaseClass(std::string("some_setting"),classPtr) { currentState = original; ... } 相关的.cpp代码(不会导致内存损坏和崩溃): MyClass::MyClass(AClass* classPtr) : BaseClass(std::string("some_setting"),classPtr),currentState(original) { ... } 编辑:看看我的“答案”是什么导致了这一点.阅读之后,有人可以向我解释为什么会有所作为吗?我没有改变标题中的任何内容,显然目标文件正在重建,因为当我将它们放入时出现我的打印语句并且缺少在一个构建下看到错误而不是另一个构建的错误吗? 为了得到一个很好的解释,我会将其标记为这个问题的答案. 解决方法
后人:
似乎make脚本由于某种原因没有获取对这些文件的更改.手动删除对象而不是让makefile中的“干净”目标导致完全重建(这需要一些时间),问题就消失了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |