【发布时间】:2021-04-12 04:16:59
【问题描述】:
我正在寻找解决方案,但找不到任何可以帮助我解决问题的方法。
编辑我不能在这个项目中使用 stl 库(所以 std::string、std:vector、std::cout 等都没有了)
我正在像这样启动我的二维字符数组:
char** string = new char*[MAX_MENU]; // MAX_MENU is 3 in my case
for (int i = 0; i < MAX_MENU; i++) {
string[i] = new char[20];
}
string[0] = "Start";
string[1] = "Leaderboard";
string[2] = "Quit";
然后当我退出应用程序时,我会调用这个函数:
for (int i = 0; i < MAX_MENU; i++) {
delete[] string[i];
}
delete[] string;
问题在于删除字符串[i]。当我不删除它时,问题不会发生,但我不想泄漏内存。
void __CRTDECL operator delete(void* const block) noexcept
{
#ifdef _DEBUG
_free_dbg(block, _UNKNOWN_BLOCK); // (X) - here is the exception
#else
free(block);
#endif
}
我该如何解决?
【问题讨论】:
-
使用 C++ 时,首选
std::vector和std::string,而不是使用new和delete。另外请发布一个minimal reproducible example 来重现问题,以便我们对其进行测试。 -
string[0] = "Start"从字符串文字中分配指针并泄漏最初的新内存。请改用std::vector<std::string>>。 -
好吧,我们不能为这个项目使用 stl 库.-.
-
现在我编辑了帖子,对此感到抱歉
-
@G.M.你应该写一个答案
标签: c++ arrays c new-operator delete-operator