草庐IT

c - 变量的值存储在 C 中的位置

在下面的代码段中:intfunc(){inta=7;returna;}可执行文件中存放数值7的代码段是什么?或者是在数据段还是在代码段?答案取决于操作系统还是编译器? 最佳答案 每个可执行格式都有一些部分。其中之一是text,包含汇编-二进制代码。其中之一是heap,其中可以找到malloc编辑的数据,而stack是存储局部变量的地方。还有其他几个,但现在无所谓了。以上三种随处可见。现在,像您的a这样的本地数据驻留在堆栈中。在可执行文件中,该值存储在text部分。我在你的代码中添加了一个main(返回0),用-g编译然后执行objd

Windows 上的 C++ 应用程序崩溃检测

我的一个C++MFC应用程序在某些windows(7,xp)计算机上随机崩溃。此应用程序使用一些第三方库(Apache轴),当我使用dependencywalker检查时,它显示应用程序在加载与此第三方库相关的DLL后退出。所以我需要一种方法来检测此应用程序崩溃的原因。有什么办法吗?我读到它可以使用.pdb文件与.exe文件一起托管来识别崩溃问题,但像往常一样,Microsoft没有明确的文档如何使用.我尝试使用IBMpurify试用版。但我没有显示任何有效信息。我尝试使用WinDbg。但我找不到如何使用它。任何帮助真的很感激。编辑:添加了崩溃报告ProblemEventName:AP

c - 使用 itoa 时未处理的异常

下面是我的代码的一部分。我不确定它有什么问题,因为当我调试这段代码时,出现以下错误:Unhandledexceptionat0x60e8144c(msvcr90d.dll)inclient0.exe:0xC0000005:Accessviolationwritinglocation0x00000000.这是itoa行中的某处。代码:intnum=LOWORD(lparam);char*number=NULL,*detail=NULL;(char*)itoa(num,number,10); 最佳答案 您必须将有效的初始化指针传递给it

c++ - 在使用 NT DDK 构建的用户模式程序中包含 C++ header

所以...我有一个内核模式组件和一个用户模式组件,我正在使用NTDDK7.1.0的交key构建环境放在一起。.内核组件都是.c/.h/.rc文件。用户模式组件是.cpp/.c/.h/.rc文件。起初,对两者都使用build似乎是最简单的,因为我看到您可以修改./sources用户模式组件的文件说这样的话:TARGETNAME=MyUserModeComponentTARGETTYPE=PROGRAMUMTYPE=windowsUMENTRY=winmainUSE_MSVCRT=1这似乎没有引起问题,所以我很高兴,直到我尝试#include(或或其他)找不到那个东西:errorC1083

c++ - _beginthread/ex C3861 - 找不到标识符

这是我的测试代码#include"stdafx.h"#include"windows.h"#include"iostream"usingnamespacestd;HANDLEhMutex;staticunsigned__stdcallthreadFunc(void*params){WaitForSingleObject(hMutex,INFINITE);printf(":D:D:D\n");ReleaseMutex(hMutex);returnNULL;}int_tmain(intargc,_TCHAR*argv[]){hMutex=CreateMutex(NULL,FALSE,NUL

C++ 西类牙语问号

我开始使用C++进行开发,我正在控制台中开发一个简单的计算器,当我的程序询问用户是否要退出时,字符“¿”没有出现(西类牙语中的问题在“¿”之间和“?”)有人可以帮助我吗?PD:这个问题只发生在Windows,Linux没有编辑:这是输出代码的代码:cout 最佳答案 有几种方法可以解决这个问题。根本问题不是¿在控制台中不存在,而是控制台和您的C++文本编辑器不同意该字符是什么。除了英语所需的字符外,两者还对许多字符使用了不同的字符代码。字符代码32-126(字母、数字、标点符号和括号)普遍相同。但是,从西类牙语的角度来看,字符代码1

c++ - 如何检查 Windows 可执行文件是否在 session 0 进程中运行?

我遇到了http://msdn.microsoft.com/en-us/library/windows/desktop/hh404562(v=vs.85).aspx#use_direct3d_in_session_0_processes。我使用了一些进程记录,并且我遇到了HRESULT值,这些值表明我的可执行文件实际上在session0下运行。我如何以编程方式推断我是否在session0下运行?我宁愿优雅地退出,也不愿退出一个神秘的错误代码。 最佳答案 GetCurrentProcessId和ProcessIdToSessionId

c++ - 'CloseToolhelp32Snapshot' : identifier not found

我正在使用基于“WIN32工具帮助功能”的内存监控库。在其源代码中调用了CreateToolhelp32Snapshot()、Heap32ListFirst()、Heap32ListNext()和CloseToolhelp32Snapshot()。我的问题是相关的windows头文件中没有CloseToolhelp32Snapshot()的原型(prototype)。我正在尝试为WindowsPC平台编译(确切地说是Win7,但我认为它与XP没有区别)。我在网上搜索了一下,一些中国人说我必须在PC平台上使用CloseHandle()而另一些人说它会产生内存泄漏。使用后如何正确关闭han

c - 在 C 中确定文件是否正在 Windows 上被删除

这个问题在这里已经有了答案:C++/Win32:Howtowaitforapendingdeletetocomplete(13个答案)关闭9年前。我有一个文件是使用WindowsAPICreateFile()使用FILE_SHARE_DELETE标志打开的,这样我就可以在文件句柄仍然打开时删除它。但是在第一个进程删除文件和进程结束之间的窗口中,我希望能够知道文件正在被删除,以便我可以进入重试循环。我发现错误代码303与我要找的完全一样:ERROR_DELETE_PENDING303(0x12F)Thefilecannotbeopenedbecauseitisintheprocessof

c++ - 如何知道从哪个DLL加载的方法

在两个DLLA.dll和B.dll中定义了一个公共(public)方法foo()。现在,当进程proc.exe加载两个DLL并从两个线程同时调用foo()方法时。有什么方法可以知道foo()在运行时是从哪个DLLA.dll或B.dll加载的。我需要此信息用于记录目的。我在互联网上找不到任何相关内容。GetModuleFileName()将返回进程名称proc.exe而不是Dll名称。 最佳答案 假设您有函数的地址,您应该能够使用以下内容来确定模块的基址。HMODULEModuleFromAddress(void*address){M