C++调用WriteConsole实现屏幕刷新功能异常,求代码错误排查
错误原因
- 核心错误:
LPDWORD number_of_chars_to_write是未初始化的野指针。WriteConsole第四个参数需要传入一个指向有效DWORD变量的地址,用于存储实际写入的字符数。你直接传入未初始化的指针,会导致函数尝试向非法内存地址写入数据,触发未定义行为,这是代码运行异常的最主要原因。 - 逻辑错误:你要实现屏幕刷新效果,当前逻辑只会不断在控制台末尾追加
#字符,并不会覆盖原有内容。需要在每次写入前将控制台光标移动到缓冲区起始位置,才能实现刷新覆盖的效果。 - 优化建议:死循环中无限制高频调用
WriteConsole会导致控制台占用资源过高,建议添加适当延时避免程序卡顿。
修正后的代码
#include <iostream> #include <Windows.h> int main() { HANDLE hScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE); // 初始化光标坐标为左上角(0,0) COORD startPos = {0, 0}; char map[100]; // 定义DWORD变量,把它的地址传给WriteConsole DWORD numberOfCharsWritten; for (int i = 0; i < 100; i++) { map[i] = '#'; } while (1) { // 每次写入前先把光标移到起始位置,实现覆盖刷新 SetConsoleCursorPosition(hScreenBuffer, startPos); WriteConsole( hScreenBuffer, map, 100, &numberOfCharsWritten, // 传入有效变量的地址 NULL ); // 加16ms延时,约60帧刷新率,可按需调整 Sleep(16); } return 0; }
内容的提问来源于stack exchange,提问作者Fedor
相关产品推荐
相关产品推荐

