由于情况的模糊性,我在问这个问题时犹豫不决,但我想知道这是如何实现的。我有一个用Visual Studio2008开发的C++应用程序。当我在Windows7 64位(或Vista 32位)上编译应用程序时,应用程序运行良好。在32位Windows XP SP3上编译应用程序时,收到缓冲区溢出警告,进程终止。它使用的是Visual Studio2008 C++编译器的相同版本。为什么我在XP上会收到缓冲区溢出,但在其他Windows平台上却没有?
发布于 2011-02-23 00:04:25
编写代码,这样就不会出现缓冲区溢出,并且在任何平台上都不会出现这种问题。也就是说,确保检查正在访问的缓冲区的边界,以确保您没有试图在适当的边界之外进行读/写。
发布于 2011-02-22 23:59:41
幸运,宇宙的根本不确定性,或者(比以前更可能的)在XP和7之间在msvcrt.dll中发生变化的实现细节。
底线是你的应用程序中有一个bug,你应该修复它。
发布于 2011-02-22 23:59:25
在这两种情况下,您可能都有缓冲区溢出,在第一种情况下,它不会被检测到,并且(显然)不会造成任何损害。在第二种情况下,它被检测到。(如果它在动态分配的内存上,您必须知道分配器分配的内存通常比请求的多,因此一个合理的解释是,在第一种情况下,溢出停留在该区域,在第二种情况下则不是)。
https://stackoverflow.com/questions/5080456
复制相似问题