【发布时间】:2020-02-24 14:28:28
【问题描述】:
因此,当我尝试创建同一程序的多个进程时,我在尝试创建第二个子进程时遇到访问冲突错误。 (我可以在尝试创建第二个子进程崩溃之前创建一个子进程)
int main(int argc, char** argv)
{
if (argc > 1 && strcmp(argv[1], "lol")) ThreadFunc();
char key_code;
int i = 0;
STARTUPINFO* si = calloc(1, sizeof(STARTUPINFO));
PROCESS_INFORMATION* pi = calloc(1, sizeof(PROCESS_INFORMATION));
WCHAR** wideArguments = calloc(1, sizeof(wchar_t*));
size_t outSize;
size_t size = strlen(arguments) + 1;
while (1) {
if (_kbhit()) {
key_code = _getch();
if (key_code == 'c') {
i += 10;
si = realloc(si, i * sizeof(STARTUPINFO));
pi = realloc(pi, i * sizeof(PROCESS_INFORMATION));
wideArguments = realloc(wideArguments, i * sizeof(wchar_t*));
for (int k = 0; k < 10; k++) {
wideArguments[i + k - 10] = calloc(256, sizeof(wchar_t));
GetModuleFileName(NULL, wideArguments[i + k - 10], 256);
wcscat_s(wideArguments[i + k - 10], 256, L" lol");
int l = CreateProcess(NULL, wideArguments[i + k - 10], NULL, NULL, FALSE, 0, NULL, NULL, &si[i + k - 10], &pi[i + k - 10]);
if (l == 0) printf("\n\n%d\n\n", GetLastError());
}
}
else if (key_code == 'x') {
free(si);
free(pi);
for(int j = 0; j < i;j++) free(wideArguments[j];
free(wideArguments);
exit(0);
}
}
else continue;
}
}
【问题讨论】:
-
请注意,
realloc不会像calloc那样将内存归零。 -
GetModuleFileName和wscat_s的缓冲区可能太小。检查返回值。 -
错字:
for(int j = 0; j < i;i++)应该是j++ -
@PaulOgilvie 也不算小,因为1进程创建成功,在尝试运行CreateProcess行一秒就崩溃了
-
si[i + k - 10]在对CreateProcess的调用中未初始化!请参阅文档。
标签: c string windows process widechar