Цитата(freezeman @ 7.5.2012, 16:29 ) | struct FileInCache { FILETIME FileTime; // дата последнего доступа к файлу char *buffer; // содержимое файла }; |
А куда, как планируется, должен указывать FileInCache.buffer? В какую область памяти?
Цитата(freezeman @ 7.5.2012, 16:29 ) | | Мне нужно сделать общей структуру для 2-х программ. |
Ну хорошо (хотя 100М переданной общей памяти - не очень). Что тогда это значит:
Цитата(freezeman @ 7.5.2012, 16:29 ) | | fileCache = (struct FileInCache *)MapViewOfFile(... |
Вы думаете, что если в одной программе FileInCache.buffer настроен правильно (указывает в нужную область памяти этого процесса), то и в другой программе этот указатель будет валидным? (Намёк: MapViewOfFile в разных программах может вернуть разный адрес даже для одного и того же объекта проекция файла, и в другом процессе то же значение для buffer'а будет указывать не туда).
Цитата(freezeman @ 7.5.2012, 16:29 ) | | // Ошибка Run-Time Check Failure #3 - The variable 'fileCache2' is being used without being initialized. |
Ну так надо же fileCache2.buffer проинициализировать:| Код | if( (fileCache2.buffer = HeapAlloc( ...size)) == NULL ) ...;
|
Если же всё таки планируется именно
Цитата(freezeman @ 7.5.2012, 16:29 ) | | Структура содержит содержимое файла и дату последнего доступа к нему |
то структуру стоит определить как | Код | struct FileInCache { FILETIME FileTime; // дата последнего доступа к файлу char buffer[1]; // содержимое файла };
|
В таком случае buffer всегда будет указывать на память, следующую сразу за FileTime (чтобы там MapViewOfFile) не вернула.
Но, пожалуйста, разберитесь с переменной size: что она означает? Длину файла или размер структуры вместе с содержимым файла?
Цитата(freezeman @ 7.5.2012, 16:29 ) | CopyMemory(fileCache2.buffer, buffer1, size); memcpy(fileCache, &fileCache2, size); |
Даже если здесь всё проинициализировано правильно, то всё равно есть противоречие с size. |