gpt4 book ai didi

c++ - 如果在 main 中使用字符串,为什么 CRT 会返回 8 字节泄漏?

转载 作者:可可西里 更新时间:2023-11-01 10:05:01 24 4
gpt4 key购买 nike

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <crtdbg.h>

#define _CRTDBG_MAP_ALLOC

using namespace std;

int main(void){
string file = "hello";
string foo;
char response;

_CrtDumpMemoryLeaks();
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);

return 0;
}

只是一个独立的小例子。控制台将显示:

Detected memory leaks!
Dumping objects ->
{143} normal block at 0x007DAE50, 8 bytes long.
Data: < B > 18 FB 42 00 00 00 00 00
{142} normal block at 0x007DAE08, 8 bytes long.
Data: << B > 3C FB 42 00 00 00 00 00

运行后。这是 CRT 未正确处理字符串的问题吗?

最佳答案

这是因为您在 main 返回之前调用了 _CrtDumpMemoryLeaks,所以字符串还没有超出范围。你应该只在字符串应该被释放后检查泄漏,例如:

void myFunc() {
string file = "hello";
string foo;
char response;
}

int main(void){

myFunc();

_CrtDumpMemoryLeaks();
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);

return 0;
}

关于c++ - 如果在 main 中使用字符串,为什么 CRT 会返回 8 字节泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com