C (C++이 아님)와 함께 cmd 프롬프트를 씁니다. 프로그램이 컴파일되지만 실행될 때 여러 번 명령을 입력하면 프로그램 버그와 중단이 발생합니다. 생각합니다. 메모리 할당에 : 는 SO이는 소스 코드 : 처음에, n_buffersize = 0
, 그래서 당신은 단지 1 바이트를 할당하는C (할당)의 메모리 관리
buffer = (char*)malloc(n_buffersize + 1);
ZeroMemory(buffer,sizeof(buffer));
참고 : 당신이
#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). 자리를 차지했다. –