Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему вылетает прогу 
V
    Опции темы
yngwie19
Дата 24.4.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравствуйте. Программа 13a.exe выделяет участок в физческой памяти из страничного файла и проецирует его на адресное пространство, после чего заполняет его целыми числами. Далее она запускает процесс 13b.exe, который открывает этот файл из физической памяти (найдя его по имени "MyFile") и также проецирует его на свое адресное пространство. И выводит значения 1 -го и последнего его элементов. Однако после запуска дочернего процесса прога вылетает. Посмотрите что не так.

Программа 13a.exe
Код

#include "stdafx.h"
#include <windowsx.h>

const int nSize = 0x4000000;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)
{
    HANDLE hMem = CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,nSize,_T("MyFile"));
    int *ptr = (int*)MapViewOfFile(hMem,FILE_MAP_ALL_ACCESS,0,0,nSize);

    for(int x = 0; x<nSize/4; x++)
        ptr[x] = x;

    // Запуск дочернего процесса 13b.exe
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi;

    si.cb = sizeof(si);

    CreateProcess(_T("13b.exe"),NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);

    TCHAR szText[80];
    wsprintf(szText,_T("Первый элемент: %d\nВторой элемент: %d"),ptr[0],ptr[nSize/4-1]);
    MessageBox(NULL,szText,_T(""),MB_OK);
    
    return 0;
}
  

Программа 13b.exe
Код

#include "stdafx.h"
#include <windowsx.h>

const int nSize = 0x4000000;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)
{
    HANDLE hMem = OpenFileMapping(PAGE_READWRITE,FALSE,_T("MyFile"));
    int *ptr = (int*)MapViewOfFile(hMem,FILE_MAP_ALL_ACCESS,0,0,nSize);

    TCHAR szText[80];
    wsprintf(szText,_T("Первый элемент: %d\nВторой элемент: %d"),ptr[0],ptr[nSize/4-1]);    // Вот здесь программа падает
    
    MessageBox(NULL,szText,_T(""),MB_OK);

PM MAIL   Вверх
Lazin
Дата 24.4.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(yngwie19 @  24.4.2009,  12:31 Найти цитируемый пост)
Посмотрите что не так.

Где-то есть ошибка smile

Добавлено через 1 минуту и 16 секунд
я не вижу в коде ни одного if-a, почему вы не обрабатываете ошибки? все api ф-ии возвращают что-то в случае неудачи, после чего можно определить причину ошибки вызвав GetLastError
PM MAIL Skype GTalk   Вверх
azesmcar
Дата 24.4.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата

Где-то есть ошибка

Я тоже не заметил
Код

wsprintf(szText,_T("Первый элемент: %d\nВторой элемент: %d"),ptr[0],ptr[nSize/4-1]);    // Вот здесь программа падает


а можно узнать где вылетает конкретней?
тут ptr[nSize/4-1] или в wsprintf или в ptr[0]?
PM   Вверх
yngwie19
Дата 24.4.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(azesmcar @  24.4.2009,  12:56 Найти цитируемый пост)
или в wsprintf или в ptr[0]?
 вот здесь. Я набрал этот пример из книги. Никак не могу определить в чем трабла

PM MAIL   Вверх
Lazin
Дата 24.4.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(yngwie19 @  24.4.2009,  13:00 Найти цитируемый пост)
Я набрал этот пример из книги. Никак не могу определить в чем трабла

обработай ошибки, которые тебе возвращают ф-ии
PM MAIL Skype GTalk   Вверх
yngwie19
Дата 24.4.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Урааааа! Нашел. короче в программе 13b.exe в строке 9 в функции MapViewOfFile() второй параметр равен FILE_MAP_ALL_ACCESS, если вместо него поставить FILE_MAP_READ, то все работает. GetLastError() выдавала "Отказано в доступе". Кстати почему так?
PM MAIL   Вверх
J0ker
Дата 25.4.2009, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



Цитата(yngwie19 @  24.4.2009,  14:06 Найти цитируемый пост)
Кстати почему так? 

потому, что на OpenFileMapping флаги такие-же, как на MapViewOfFile, а не такие, как на CreateFileMapping


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1798 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.