代码之家  ›  专栏  ›  技术社区  ›  James

VisualC++:无效的分配大小。如何强制调试器停止此消息?

  •  3
  • James  · 技术社区  · 15 年前

    我正在调试的MFC程序正在Visual Studio 9.0的“输出”窗口中打印此消息:

    HEAP[AppName.exe]: Invalid allocation size - 99999998 (exceeded 7ffdefff)
    

    我敢肯定这是由于一个坏的“新的”,未初始化的变量或类似的错误。

    问题是:如何让调试器停止处理此消息,以便查看堆栈跟踪并解决问题?


    Invalid allocation size: 4294967295 bytes.

    int stupid = -1;
    char *bob = new char[stupid];
    

    以及:

    malloc(-1);
    

    4 回复  |  直到 15 年前
        1
  •  4
  •   Brian Nixon    14 年前

    错误消息可能来自 HeapAlloc()

    我可以用以下代码复制消息:

    HANDLE hHeap = HeapCreate(0, 0, 4096);
    LPVOID p = HeapAlloc(hHeap, 0, 0x99999998);
    

    DbgPrint() 在ntdll.dll中,我将尝试在那里设置断点(这是一个导出函数,因此不需要符号文件来查找其地址),然后查看调用堆栈。

        2
  •  1
  •   bshields    15 年前

    该错误消息打印在dbgheap.c的第409行,该行位于ProgramFiles\MicrosoftVisualStudio9.0\VC\crt\src中。你应该可以在那里设置一个断点。

        3
  •  0
  •   Simon    15 年前

    试试这个:

    在菜单栏中,转到 Debug -> Exceptions C++-Exception 打电话 std::bad_alloc 并选中复选框 Thrown

        4
  •  0
  •   Roel    15 年前

    你知道那个函数在哪里,或者它叫什么吗?Grep错误消息中字符串的运行时源。尝试在调试窗口中的函数调用或文件/位置上设置断点->新建断点对话框。

    如果这不起作用,你可以打破大枪(但这是痛苦的和耗时的),并修改文件的功能实现(如果它在一个头-如果它在一个.cpp文件它甚至更大的工作)。添加以下内容:

    __asm {
        int 3;
    }