问题标签 [msvcrt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
252 浏览

c++ - msvcrt:内存使用量变大,但不在调试器下

我有一个用英特尔编译器编译的 C++ 代码,32 位,在 MS VC6 模式下,所以使用 msvcrt.dll 或 msvcrtd.dll。该进程进行大量内存分配和释放。我使用 WMI 监控内存使用情况并查看 VirtualSize 和 WorkingSetSize。

使用调试运行时 (msvcrtd.dll):虚拟常量 1.7GB,工作常量 1.2GB
,使用非调试运行时 (msvcrt.dll):虚拟提升 1.7-- 2.1GB
使用非调试运行时提升 1.2-1.4GB 但低于调试器(windbg):虚拟常量 1.7GB,工作常量

在 2.1 GB 虚拟时,进程正在崩溃(如预期的那样)。但是,为什么只有(非调试)msvcrt.dll 并且只有不在调试器下才会增加虚拟使用量?在所有情况下,编译标志都是相同的,只有运行时库不同。

0 投票
2 回答
975 浏览

c++ - 视觉 c++ 2010 与旧运行时的链接?

抱歉,如果有人问过这个问题。

就像我可以在 C# 项目中选择我希望它为 .NET 2.0 运行时构建的那样,本机 C++ 项目是否可以针对较旧的 CRT 构建,比如说来自 Visual Studio 2005 的项目?

我想要这个,因为我有使用 VS2005 构建的外部 SDK,但我想使用更新的 IDE。

0 投票
2 回答
2098 浏览

c++ - C++ 双除以 0.0 与 DBL_MIN

求双精度的平方根反比时,将无效的非正输入钳制在 0.0 或 MIN_DBL 是否更好? (在我下面的示例中double b,由于浮点舍入误差和物理定律在游戏中稍微有些捏造,最终可能会变成负数。)

除以 0.0 和 MIN_DBL 在游戏中产生相同的结果,因为1/0.01/DBL_MIN实际上是无穷大。我的直觉说 MIN_DBL 是更好的选择,但有任何情况下使用 0.0 吗?可能和乘法一样sqrt(0.0),因为它们是特殊情况,所以执行速度更快。1/0.01.#INF000000000000

MSVC中的双除法:

0 投票
5 回答
199603 浏览

visual-studio - Resolving LNK4098: defaultlib 'MSVCRT' conflicts with

This warning:

is a fairly common warning in Visual Studio. I'd like to understand the exact reason for it and the right way (if at all) to handle it.

This comes up in a debug build, compiled with /MDd. The project is linked to things like windows Version.dll and pdh.dll which themselves link with MSVCRT.dll. Obviously, I don't have the debug versions of these and can't compile them.

So I added /NODEFAULTLIB:MSVCRT to the linker command line and it actually did remove the warning. But what does this actually do? And why is it necessary?

0 投票
5 回答
14620 浏览

c++ - 为什么标量删除会调用向量删除析构函数?

我有一些在大型系统中崩溃的代码。但是,代码本质上归结为以下伪代码。我已经删除了很多细节,因为我试图将其归结为裸露的骨头;我不认为这会遗漏任何重要的东西。

和:

请注意,正在使用匹配的标量 new 和标量 delete。

在 Visual Studio (2008 Pro) 的调试版本中,在 Microsoft 的 <dbgheap.c> 中,以下断言失败:

靠近堆栈顶部的是以下项目:

我认为这应该是

也就是说,程序的行为就像我写的一样

中的地址pUserData是它myObj自己的地址(而不是成员)。该地址周围的内存如下所示:

其中四个VVs 可能是虚函数表的地址,MM...MM是可识别的成员数据,其他字节是调试器放置的各种特殊标记(例如,FD FDs 是对象存储周围的“保护字节”)。

在断言失败前不久,我确实看到了VVs 的变化,并想知道这是否是由于切换到基类的虚函数表所致。

我知道类层次结构中错误级别的问题正在被破坏。这不是这里的问题。我的析构函数都是虚拟的。

我注意到微软的页面“BUG: Wrong Operator Delete Called for Exported Class” http://support.microsoft.com/kb/122675 但这似乎是关于错误的可执行文件(带有错误的堆)试图承担破坏的责任数据。

就我而言,删除析构函数的错误“风格”似乎正在被应用:即向量而不是标量。

我正在尝试生成仍然存在问题的最小缩减代码。

但是,任何有助于如何进一步调查此问题的提示或技巧将不胜感激。

也许这里最大的线索是mydll_d.dll!operator delete()堆栈上的。我应该期望这是myexe_d.exe!operator delete(),表明DLLEXPs 已经“丢失”了吗?

我想这可能是双重删除的一个实例(但我不这么认为)。

关于_CrtIsValidHeapPointer检查的内容,我可以阅读一个很好的参考吗?

0 投票
3 回答
3781 浏览

visual-c++ - 混合使用 /MT 和 /MD 编译的代码

我有大量的代码,用 /MT 编译(即期望静态链接到 CRT)。我需要将它与使用 /MD 构建的静态第三方库结合起来(即期望动态链接 CRT)。

理论上是否可以在不重新编译的情况下将两者链接到一个可执行文件中?

如果我与 /nodefaultlib:msvcrt 链接,我最终会得到少量未定义的引用,例如__imp__wgetenv. 我很想尝试在我自己的代码中实现这些功能,转发到wgetenv等。这值得尝试,还是我会直接遇到下一个问题?

不幸的是,我被禁止将第三方代码打包到单独的 DLL 中:-/

0 投票
2 回答
5006 浏览

c - fread 仅 .PNG 文件的前 5 个字节

我制作了一个简单的资源打包器,用于将我的游戏资源打包到一个文件中。一切都很顺利,直到我开始编写解包器。我注意到我打包的 .txt 文件 - 26 字节 - 很好地从资源文件中出来,没有任何问题,所有数据都保留了。但是,当读取我打包在资源文件中的 .PNG 文件时,前 5 个字节是完整的,而其余的则完全无效。

我将其追溯到打包过程,我注意到 fread 仅读取 .PNG 文件的前 5 个字节,而我终其一生都无法弄清楚原因。它甚至会触发“EOF”,表明该文件只有 5 个字节长,而实际上它是一个 787 字节的 PNG 小多边形,100 像素 x 100 像素。

我什至通过制作一个单独的应用程序来简单地将这个 PNG 文件读入缓冲区来测试这个问题,我得到了相同的结果,并且只读取了 5 个字节。

这是那个小的独立应用程序的代码:

有人可以指出我的愚蠢错误吗?

0 投票
1 回答
2155 浏览

visual-studio-2010 - 如果系统是 64 位,则安装 VC++ Runtime 64 位

我正在创建一个 Visual Studio 2010 安装项目来安装我的应用程序。我的应用程序通过为不同的系统位数提供多个可执行文件来工作,并检测您是在 32 位还是 64 位系统上运行。

如果它是 64 位系统,我希望安装程序安装 Visual C++ 2010 x64 Runtime。将此设置为先决条件,将禁用在 32 位系统上的安装。有没有办法将此设置为先决条件,但仅限于 64 位系统,而无需使用两个不同的安装程序?

0 投票
4 回答
5221 浏览

python - Py2exe 与 Tkinter

我正在尝试使用 py2exe 将基本的 tkinter GUI 程序转换为 .exe。但是,我使用以下转换脚本遇到了错误。

C:\Python26\py2exe_test_tk.py 是以下代码

这是我尝试运行新创建的 .exe 时遇到的错误

我很确定这是我的转换脚本中给我带来问题的东西。我遗漏了什么?或者有人有一个关于 tkinter GUI 程序的转换脚本是什么样子的例子吗?也可以将输出的 .exe 文件转移到我的桌面吗?

编辑:

错误报告说我缺少init.tcl来自{C:/Users/My_name/lib/tcl8.5}所以我创建了那个目录并将init.tcl的副本放在那里。现在,当我尝试运行 .exe 时,它​​指出我的计算机中缺少MSVCR90.dll并且需要运行我的程序。

这也是 Windows 7 上的 python 2.6.5。

0 投票
3 回答
25282 浏览

c - 如何从 fopen FILE 结构中获取文件 HANDLE?

fopen函数返回一个指向FILE结构的指针,它应该被认为是一个不透明的值,而不处理它的内容或含义。

在 Windows 上,C 运行时是 Windows API 的包装器,fopen函数依赖于CreateFile函数。该CreateFile函数返回 a HANDLE,供其他 Windows API 使用。

现在,我需要在使用fopenFILE*. 那么:有没有办法HANDLEFILE结构中获取?由于这是特定于编译器的,我的意思是在 MSVC 运行时库上。

我知道这将是一个丑陋的、不可移植的 hack,如果 Microsoft 更改FILE...的内部格式,它可能会崩溃,但我正在一个封闭的系统上开发(即在 Windows CE 嵌入式系统上)并重构库将是困难和耗时的。