Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2009, 22:54   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Страшная ошибка при создании процесса

Программа в каталоге, в котором она была вызвана, должна перебирать все имеющиеся файлы и выводить их имена.

Код:
int _tmain(int argc, _TCHAR* argv[])
{
	
	TCHAR buffer[MAX_PATH];
	HANDLE hFile;
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	WIN32_FIND_DATA findFileData;
	DWORD dwError;


	ZeroMemory(&si, sizeof(STARTUPINFO));
	si.cb = sizeof(STARTUPINFO);

	GetCurrentDirectory(sizeof(buffer), buffer);

	if(!CreateProcess(NULL, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))
	{
		printf("Create Process failed (%d)\n", GetLastError());
		return -1;
	}
	WaitForSingleObject(pi.hProcess, INFINITE);
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);

	SetCurrentDirectory(buffer);

	hFile = FindFirstFile(TEXT("*.*"), &findFileData);
	
	if(hFile==INVALID_HANDLE_VALUE)
	{
		printf("Invalid file handle (%d)\n", GetLastError());
		return -2;
	}
	else 
	{
		printf("First file name is %s\n", findFileData.cFileName);
	}
	while(FindNextFile(hFile, &findFileData)!=0)
	{
		printf("File name is %s\n", findFileData.cFileName);
	}

	dwError = GetLastError();

	FindClose(hFile);

	if(dwError!=ERROR_NO_MORE_FILES)
	{
		printf("Error!%d", GetLastError());
		return -3;
	}

	return 0;
}
При компиляции не выдаются даже варнинги - все чисто. Но при запуске в строчке создания процесса выдается ошибка: Access violation reading location 0x00000000.

Ничего не понимаю.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 02.10.2009, 23:17   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

(!CreateProcess(NULL, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))
а это чего?
Д'якон вне форума Ответить с цитированием
Старый 03.10.2009, 00:10   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
if(!CreateProcess(NULL, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))
{
printf("Create Process failed (%d)\n", GetLastError());
return -1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
- явно козе баян, лишнее

...да и один параметр вызова Createprocess не в nil же
Createprocess(nil,'тут путь и имя файла',nil,nil,false,Create_default _error_mode,nil,nil,si,pi);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.10.2009, 01:17   #4
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Да, да, спасибо большое! Все так.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при создании TImage Juffin Общие вопросы Delphi 9 22.04.2009 17:49
Ошибка при создании таблицы LAGOX SQL, базы данных 1 28.03.2009 00:46
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51
Interbase ошибка при создании базы Алёна БД в Delphi 13 10.02.2008 16:45