在使用g ++构建代码时,我遇到以下问题不止一次:
一切似乎都很好。你编译,运行然后繁荣 - 一个段错误突然向你跳跃。你开始看代码,找不到任何东西,做干净&&制造,问题就消失了。
我已经看到这种情况发生在不同的g ++版本,不同的机器,不同的内核上。
为什么会这样?有没有办法阻止它?
答案 0 :(得分:2)
如果更改头文件,则Makefile中没有任何机制可以确定哪些源文件包含这些文件,需要重新编译。您可能遇到的问题是,如果标头文件A.h
定义了类A
,并且您添加或删除或重新排列A
的成员,则类的大小会发生变化。但是,旧的大小仍然在某些源文件中使用,因此当您在堆栈上或在堆栈上创建类的实例时,最终可能会导致其中一个源文件过度分配或分配不足。堆。 make clean
强制关于类的新信息传播,因为所有源文件都必须重新编译。
如果您对头文件进行了重大更改,那么完全重建可能是最安全的。