小编Jef*_*ffR的帖子

加载Windows minidump文件,现在无法加载二进制文件?

我将minidump文件加载到Visual Studio 2010中,从我的程序文件夹和Microsoft Symbol Server加载所有符号,然后我选择"仅调试本机",程序运行到崩溃的地方,显示的错误与显示的相同. exe崩溃时远程计算机.

现在出现错误"找不到program.exe",并且在minidump中找不到"program.exe.您需要加载二进制文件才能找到当前堆栈帧的源代码"

当我点击"浏览并找到program.exe"时,我选择它但VS不会打开它?

debugging minidump visual-studio

7
推荐指数
1
解决办法
1949
查看次数

如何将崩溃的"故障偏移"与源代码相匹配?

我编译的EXE不断崩溃.崩溃时,我在事件查看器中有以下信息:

异常代码:0xc0000008
故障偏移:0x00000000000cb8e8

如何将"故障偏移"与我的C++代码相匹配?.PDBRelease文件夹中有一个文件,只是不确定要解决这个问题的步骤.

c++ visual-studio-debugging pdb-files visual-studio-2012

4
推荐指数
1
解决办法
7119
查看次数

如何快速清除DWORD指针数组?

这是我的代码.

DWORD *dwDSE = new DWORD[4096];
Run Code Online (Sandbox Code Playgroud)

这是我清除它的[低效]方式:

for (INT k=0;k<4096;k++)
    dwDSE[k] = 0;
Run Code Online (Sandbox Code Playgroud)

清除它/将其初始化为零的最佳方法是什么?

c++ arrays pointers

2
推荐指数
1
解决办法
1119
查看次数

如何清除 C 中的结构数组,然后释放该内存?

两个问题:

  1. 如何快速清除结构体数组?
  2. 如何释放结构体成员分配的内存?

代码:

struct sComputerNames
{
    TCHAR *sName;   // Using a pointer here to minimize stack memory.   
};

TCHAR *sComputer  = (TCHAR *) calloc(2048+1, sizeof(TCHAR));
struct sComputerNames sCN[4096] = {0};


_tcscpy(sComputer,L"PC1");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);


// What is a better way to clear out the structure array?
for (DWORD i=0;i<4096;i++)
{
    free(sCN[i].sName);
    sCN[i].sName=NULL;
}


// Assign a new value
_tcscpy(sComputer,L"PC2");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);


free(sCN);sCN=NULL;     // Erroring here - how to free memory allocated by …
Run Code Online (Sandbox Code Playgroud)

c struct

1
推荐指数
1
解决办法
1万
查看次数

将 C 数组中的一个字符转换为大写会给出 C4244 警告

这是我的代码,我想将字符串中的一个字符转换为大写。

TCHAR sPassword[16] = L"password";
INT iChar = toupper(sPassword[4]);
sPassword[4] = iChar;
Run Code Online (Sandbox Code Playgroud)

它运行正常,但我收到警告:

warning C4244: '=': conversion from 'int' to '_Ty', possible loss of data
Run Code Online (Sandbox Code Playgroud)

我试过铸造iChar(INT)但没有任何区别。

c compiler-warnings toupper

1
推荐指数
1
解决办法
62
查看次数

C++ 编译器警告 C26409 - 避免调用 new 和 delete

这是我在进行 Visual Studio 2019 代码分析后得到的代码(警告 C26409 避免显式调用 new 和 delete,请使用 std::make_unique (r.11)。):

#include <windows.h>
#include <strsafe.h>
int main()
{
    auto *sResult = new WCHAR[256];
    StringCchPrintfW(sResult, 256, L"this is a %s", L"test");
    delete[] sResult;
}
Run Code Online (Sandbox Code Playgroud)

我原本假设使用 new/delete 而不是 calloc/free,但现在编译器告诉我使用 std::make_unique。我找不到任何有关如何更改代码以使其兼容的示例。

所以我的问题是:

  1. 如何更改我的代码,使其不使用 new/delete

  2. 为什么我不应该使用 new/delte 与 std::make_unique ?

c++ code-analysis new-operator microsoft-code-analysis

1
推荐指数
1
解决办法
486
查看次数

std::vector 不会释放线程中的内存

如果我使用 , 创建一个线程_beginthreadex,并且在我使用的线程中std::vector<WCHAR>消耗 200MB 内存 - 当线程结束时,内存不会被释放。即使之后CloseHandle,内存也不会被释放。

这是一个工作示例:

#include <windows.h>
#include <process.h>
#include <vector>
using namespace std;

unsigned __stdcall   Thread_RestartComputer(void* pComputerName)
{
    std::vector<WCHAR> asdf(100000000);
    _endthreadex(0);
    return 0;
}
int main()
{
    UINT threadID = 0;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_RestartComputer, 0, CREATE_SUSPENDED, &threadID);
    ResumeThread(hThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
}
Run Code Online (Sandbox Code Playgroud)

我认为当std::vector<WCHAR>它超出范围时释放内存?

c++ memory multithreading vector beginthreadex

1
推荐指数
2
解决办法
197
查看次数

使用'new'时是否需要释放分配的wchar内存,或者delete []是否也可以释放它?

试图找到释放内存的正确方法,但我找不到确切的答案。我确定它在那里,但是我似乎找不到它,我有点困惑。

这就是我在做什么。我从sUsers创建一个新的sStructUsers,然后为用户名分配内存

    struct sStructUsers 
        {
        TCHAR *sName;
        };

    sStructUsers *sUsers = new sStructUsers[TOTALUSERS]();

    // Allocate memory for the TCHARs in sStruct
    for (INT k = 0; k < TOTALUSERS; k++)
        {
        sUsers [k].sName =  (TCHAR*)calloc(128,sizeof(TCHAR))
        }
Run Code Online (Sandbox Code Playgroud)

接下来,我需要对sName成员进行任何工作

    // do work here
Run Code Online (Sandbox Code Playgroud)

现在,要执行清理操作:

    delete[] sUsers;
Run Code Online (Sandbox Code Playgroud)

还是我这样做?

    for (INT k = 0; k < TOTALUSERS; k++)
        {
        free(sUsers[k].sName);
        }
    delete[] sUsers?
Run Code Online (Sandbox Code Playgroud)

我不确定是否需要释放内存,或者delete []是否可以处理?

c++ arrays struct delete-operator

0
推荐指数
1
解决办法
83
查看次数