gpt4 book ai didi

c++ - 多次调用的函数导致程序退出并出现神秘错误

转载 作者:行者123 更新时间:2023-11-28 03:34:07 24 4
gpt4 key购买 nike

我将问题隔离到这段代码:

#include <windows.h>
using namespace std;

const wchar_t* readLine(int posX, int posY, int len) {
wchar_t* wcharFromConsole = new wchar_t[len];
COORD pos = {posX,posY};
DWORD dwChars;
ReadConsoleOutputCharacterW(GetStdHandle(STD_OUTPUT_HANDLE),
wcharFromConsole, // Buffer where store symbols
len, // Read len chars
pos, // Read from row=8, column=6
&dwChars); // How many symbols stored
wcharFromConsole [dwChars] = L'\0'; // Terminate, so string functions can be used
return wcharFromConsole;
}

int main() {
for (int i = 0; i <= 63; i++) {
readLine(0,0,80);
}
system("pause");
}

问题是,如果循环运行次数少于 63 次,它会起作用;如果从控制台加载的字符长度小于 80,它也会起作用……我不知道这里发生了什么。有没有我必须明确关闭的资源……但是为什么,如果一个函数关闭它也应该关闭它的所有资源。但是我不知道这里发生了什么,编译后的程序(没有任何错误)在静默 system() 函数之前退出。当我从我的项目中删除部分代码时,还有其他错误代码,有时是程序以不寻常的方式请求终止,有时是程序挂起并停止接受键盘输入。

--编辑:

我已经根据建议更新了代码:

#include <iostream>
#include <windows.h>

using namespace std;

const wchar_t* readLine(int posX, int posY, int len) {
wchar_t* wcharFromConsole = new wchar_t[len];
COORD pos = {posX,posY};
DWORD dwChars = 0;
if(!ReadConsoleOutputCharacterW(GetStdHandle(STD_OUTPUT_HANDLE),
wcharFromConsole, // Buffer where store symbols
len, // Read len chars
pos, // Read from row=8, column=6
&dwChars)) // How many symbols stored
{
cout << "ReadConsoleOutputCharacterW failed, code" << GetLastError() << endl;
}
wcharFromConsole [dwChars] = L'\0'; // Terminate, so string functions can be used
return wcharFromConsole;
}

int main() {
for (int i = 0; i <= 100; i++) {
cout << "loop count: " << i << endl;
readLine(0,0,80);
}
system("pause");
}

输出:

loop count: 0
loop count: 1
loop count: 2
loop count: 3
// [...]
loop count: 63
loop count: 64

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

(第一个片段根本没有产生任何错误。)

最佳答案

这可能只是“差一个”。您正在为“Len”字符分配空间,您正在读取“Len”字符,但您在末尾添加了一个额外的\0。

更改您的新分配 Len+1,您可能会没事。

关于c++ - 多次调用的函数导致程序退出并出现神秘错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594751/

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