私はC(C++ではない)を使ってcmdプロンプトを書きます。プログラムはコンパイルされますが、実行すると何回かコマンドを入力するとプログラムのバグが発生し、中止します メモリ割り当てに:あなたが持っているC(割り当て)のメモリ管理
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
char* Execute(char*);
HANDLE readIN = NULL;
HANDLE writeIN = NULL;
HANDLE readOUT = NULL;
HANDLE writeOUT = NULL;
int
main(int argc, char** argv)
{
SECURITY_ATTRIBUTES saAttr;
STARTUPINFO si;
PROCESS_INFORMATION pi;
char cmd[12];
char* out = NULL;
ZeroMemory(cmd,sizeof(cmd));
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&readOUT, &writeOUT, &saAttr, 0);
CreatePipe(&readIN, &writeIN, &saAttr, 0);
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
GetStartupInfo(&si);
si.cb = sizeof(STARTUPINFO);
si.hStdError = writeOUT;
si.hStdOutput = writeOUT;
si.hStdInput = readIN;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
CreateProcess(NULL,
"cmd.exe",
NULL,
NULL,
TRUE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
);
while (TRUE)
{
out = Execute(cmd);
printf("%s\n", out);
scanf("%s", cmd);
strcat(cmd,"\n");
}
free(out);
return 0;
}
char*
Execute(char* cmd)
{
DWORD bwritten = 0;
DWORD buffersize = 0;
int outputsize = 0;
DWORD breaden = 0;
char* output = NULL;
char* buffer = NULL;
DWORD n_buffersize;
WriteFile(writeIN, cmd, strlen(cmd), &bwritten, NULL);
while (TRUE)
{
Sleep(2000);
PeekNamedPipe(readOUT, NULL, NULL, NULL,&buffersize, NULL);
n_buffersize = buffersize;
if (n_buffersize)
{
buffer = (char*)malloc(n_buffersize + 1);
ZeroMemory(buffer,sizeof(buffer));
ReadFile(readOUT, buffer, n_buffersize, &breaden, NULL);
}
else
break;
if (breaden)
{
outputsize += n_buffersize + 1;
output = (char*)realloc(output, outputsize);
strcat(output, buffer);
free(buffer);
}
}
return output;
}
と*中止は全く役に立たない問題の説明です。 **あなたが投稿したコードで**あなたは特定の**問題がありますか?デバッガは、コードをステップ実行したときに何を伝えますか? –
デバッガmsg:mycmd.exeの0x77BF62AC(ntdll.dll)に対する未処理例外:0xC0000374:メモリセグメントが破損しています(パラメータ:0x77C26480)。起こった –