我认为这是一个编译器错误,这不应该影响我的代码,但它是 [关闭]
Posted
技术标签:
【中文标题】我认为这是一个编译器错误,这不应该影响我的代码,但它是 [关闭]【英文标题】:I think this is a compiler error, this shouldn't be affecting my code but it is [closed] 【发布时间】:2015-01-12 22:41:47 【问题描述】:我的 main 函数的代码中有这个。
int buncha_ints[] = 0, 0, 0, 0, 0 ;
当它不存在时,我的程序运行良好,而当它存在时,我的程序无法运行。我的问题是,这不应该完全没有影响吗?打开一个新的范围,然后立即关闭。该数组被分配、初始化,然后从堆栈中清除。如果这会影响我的程序的其余部分,这一定是编译器错误吧?
这确实是我的问题,但如果需要更多细节,这是一个相当简单的 DirectX11 Win32 程序。我只是在屏幕上渲染 2 个方块,当我将上面的代码放入其中时,它不再渲染。我无法渲染第三个正方形,在实验之后我发现了一些可以归结为上述问题的奇怪之处,每当分配超过 4 个字节的内容时,无论它在哪里,即使它从未被调用,我的程序停止渲染。这似乎很明显,我的目标平台是 32 位的。
【问题讨论】:
对,在正确的程序中应该看不到效果。when its not there my program works fine, and when it is there my program doesn't work
内存损坏错误的所有迹象。添加和删除该行时,您所做的只是将损坏错误移至程序的另一个区域。
顺便说一句,将该行留在程序中并修复错误。不要删除它,以为您的程序没有该行是固定的。
您忽略了“工作正常”和“似乎工作正常”之间的区别。您的程序完全属于后者,而不是前者。
我们说明错误确切原因的唯一方法是查看您的代码。不幸的是,问题是如果你没有足够的经验来自己寻找这些错误,你就不会找到它们(一切看起来都很好)。
【参考方案1】:
这是访问错误内存位置的典型标志。即在程序的其他部分中,您正在执行超出范围的访问。当您定义该数组时,您只是在移动内存块。只需简单地使用valgrind 来检查。
【讨论】:
问题被标记为“winapi”,因此推测 OP 正在使用 MSVC。 Valgrind 在那种环境下工作吗?以上是关于我认为这是一个编译器错误,这不应该影响我的代码,但它是 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章