草庐IT

c# - 如何在混合应用程序中获取有关缓冲区溢出异常的信息?

在我开发的所有WPF应用程序中,都有一个订阅了AppDomain.CurrentDomain.UnhandledException的全局异常处理程序,它记录了它可以找到的所有内容,然后显示一个对话框告诉用户联系作者,在哪里日志文件等。这非常有效,客户和我都非常满意,因为它可以快速解决问题。然而,在混合WPF/C#/CLI/C++应用程序的开发过程中,有时会出现应用程序崩溃,而这些崩溃不会进入上述异常处理程序。相反,会弹出一个标准的Windows对话框,提示“XXX已停止工作”。在细节中它显示例如ProblemEventName:BEXApplicationName:XXX.exeFau

C++ 堆栈溢出

这是一些代码:voidmain(){GameEnginege("phil","anotherguy");stringresponse;do{ge.playGame();cout>response;}while(response=="r"||response=="R"||response=="s"||response=="S");}GameEngine::GameEngine(stringname1,stringname2){p1Name=name1;p2Name=name2;}voidGameEngine::playGame(){cout我已经发布了程序崩溃前执行的每一行代码。这段代码

c++ - Visual Studio 2015 代码分析 C6386 缓冲区溢出警告

我已经阅读了很多关于VisualStudioCodeAnalysis警告C6386的信息,但我无法用我的代码找出这个特定问题。我已将其简化为以下小程序:unsignedintnNumItems=0;intmain(){int*nWords=nullptr;unsignedintnTotal;nTotal=3+2*nNumItems;nWords=newint[nTotal];nWords[0]=1;nWords[1]=2;//thisisline18,warningC6386delete[]nWords;return0;}Analyze->RunCodeAnalysis->OnSolu

c++ - 双溢出?

我一直想知道如果double达到它的最大值会发生什么,所以我决定写这段代码:#include#include#defineUINT64_SIZE18446744073709551615intmain(){std::uint64_ti=UINT64_SIZE;doubled1=((double)(i+1))/UINT64_SIZE;doubled2=(((double)(i))/UINT64_SIZE)*16;doubled3=((double)(i*16))/UINT64_SIZE;std::cout我期待这样的事情:0160但这是我的输出:0161这是怎么回事?为什么d3和d1的值不

c++ - 执行时溢出/下溢是未定义的行为吗?

我正在阅读有关未定义行为的信息,我不确定它是否只是编译时的特性,或者它是否可以在执行时发生。我很理解这个例子(这是从UndefinedBehaviorpageofWikipedia中提取的):AnexamplefortheClanguage:intfoo(unsignedx){intvalue=5;value+=x;if(valueThevalueofxcannotbenegativeand,giventhatsignedintegeroverflowisundefinedbehaviorinC,thecompilercanassumethatatthelineoftheifcheck

c++ - 为什么整数溢出会导致 C++ iostream 出错?

好的,所以我对C++iostream有一些感觉很奇怪的问题,但它可能是定义的行为,考虑到MSVC++和G++都会发生这种情况。假设我有这个程序:#includeusingnamespacestd;intmain(){inta;cin>>a;cout>a;cout如果我通过给第一个cin一个大于int的最大限制的值来故意溢出,所有对cin.operator>>()的进一步调用将由于某种原因立即返回,并且a被设置为某个值。该值似乎未定义。为什么,这种行为记录在哪里?有没有办法确定是否发生了这种溢出?另外,这个类似的程序似乎可以按我的预期运行。如果我溢出该值,它会为a提供一些值,并继续进行,

c++ - 如果表达式的中间结果溢出,是否是未定义行为?

这个问题是另一个SOquestion的结果.示例代码#includeintmain(){unsignedlongb=35000000;inti=100;intj=30000000;unsignedlongn=(i*j)/b;//#1unsignedlongm=(100*30000000)/b;//#2std::cout输出8585使用g++-std=c++11-Wall-pedantic-O0-Wextra编译此代码会给出以下警告:9:28:警告:表达式[-Woverflow]中的整数溢出问题我认为#1和#2调用未定义行为是否正确,因为中间结果100*30000000没有适合int?还

C++从istream读取int,检测溢出

如果我使用>>运算符从istream中读取一个整数,并且表示的整数大于INT_MAX,则该操作只返回INT_MAX。我目前正在与INT_MAX进行比较以检测溢出,但如果输入操作“2147483647”,那么它会返回一个错误,而实际上没有错误,结果是有效的。例子:http://ideone.com/4bXyGd#include#include#includeintmain(){std::istringstreamst("1234567890123");//Trywith2147483647intresult;st>>result;if(result==INT_MAX)std::cout在

c++ - `recv()` 会导致缓冲区溢出吗?

我正在介绍自己使用C/C++进行套接字编程,并使用send()和recv()在客户端和服务器程序之间交换数据TCP套接字。以下是我的代码的一些相关摘录:server.c:charrecv_data[1024];//Socketsetupandsoonommited...bytes_recieved=recv(connected,recv_data,1024,0);recv_data[bytes_recieved]='\0';client.c:charsend_data[1024];//Setupommited...send(connected,send_data,strlen(send

c++ - QueryPerformanceCounter 和溢出

我正在使用QueryPerformanceCounter在我的应用程序中做一些计时。但是,在运行几天后,该应用程序似乎停止正常运行。如果我只是重新启动应用程序,它就会再次开始工作。这让我相信我的计时代码中存在溢出问题。//Author:RyanM.Geiss//http://www.geisswerks.com/ryan/FAQS/timing.htmlclasstimer{public:timer(){QueryPerformanceFrequency(&freq_);QueryPerformanceCounter(&time_);}voidtick(doubleinterval){