在运行时更改类成员的值,这是哪种错误
value of a class member be changed in run time, which kind of error is it?
我的代码是这样的:
class myclass
{
public:
char someinfo[100];
void dosomething();
}
void myclass::dosomething()
{
TRACE("someinfo : %s", someinfo);
//do something
}
int main(int argc, char *argv[])
{
myclass* obj = new myclass;
strncpy(obj->someinfo, "hello,world", 100);
TRACE("someinfo : %s", obj->someinfo);
obj->dosomething();
delete obj;
}
两个 TRACE 的结果是这样的:
someinfo: hello,world
someinfo: ello,world
惠克类型的错误会导致这种情况吗?这很奇怪。
我已经找到了原因.如果这样做,它应该会导致此错误:
- 将上面的代码写入三个文件:main.cpp,myclass.h,myclass.cpp make, get
- main.o, myclass.o; link, get out file test.out
- 编辑 myclass.h 和 myclass.cpp,在"char someinfo[100];"之前添加一个布尔类型成员;
- 只需制作myclass.o,并链接,获得新的测试。
- 现在,如果您执行test.out,则会发生此错误。
我已经找到了原因.如果这样做,它应该会导致此错误:
- 将上面的代码写入三个文件:main.cpp,myclass.h,myclass.cpp
make, get- main.o, myclass.o; link, get out file test.out
- 编辑 myclass.h 和 myclass.cpp,在"char someinfo[100];"之前添加一个布尔类型成员;
- 只需制作myclass.o,并链接,获得新的测试。
- 现在,如果您执行test.out,则会发生此错误。
是的。如果更改多个翻译单元共有的结构的布局,但仅重新编译其中一个,则代码中存在类型差异。
你的程序有一半有一个定义,另一半有另一个定义。C 字符串位于一个位置,但一半的程序认为它在内存中比实际早一个字节。难怪它不能正常工作!
[C++11: 3.2/5]
明确禁止您所做的一切。
习惯于在更改头文件时重新生成整个项目。
相关文章:
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 如何修复分段错误运行时错误
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- VBA 中的 Qt5 Dll,错误运行时错误 453
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- 为什么我在没有calloc函数的情况下得到错误运行时
- 我不断收到函数初始化错误.(运行时检查失败 #3)
- C++11 线程错误运行时
- SIGSEGV错误(运行时错误)
- Visual Studio c++ MSVCR100.dll错误运行时
- 运行时错误 - C++ 运行时检查失败 #2 - 变量"theArray"周围的堆栈已损坏
- OpenGl的错误.运行时立方体顶点位置错误
- c++编程错误-运行时错误