С++ запись в файл, отображенный в памяти, и чтение, разные результаты при отладке и выпускеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 С++ запись в файл, отображенный в памяти, и чтение, разные результаты при отладке и выпуске

Сообщение Anonymous »

У меня есть код для записи строки в MMF и ее чтения.
Этот код отлично работает в отладочной сборке, но не в выпускной.

Код: Выделить всё

#include              //for cout
#include             //split + to_string
#include                 //MMF + GetModuleFileName

#define BUF_SIZE 256
HANDLE hMapFile;
LPCWSTR pBuf; //LPCSTR
LPCWSTR szName;

#include  //pour utiliser _tcslen

bool init_error = false;

int get_TCHAR_length(std::string str)
{
size_t size = str.length();
TCHAR* wArr = new TCHAR[size + 1];
//wArr[size] = '\0';

return (_tcslen(wArr) * sizeof(TCHAR));
}

TCHAR* convert_string_to_TCHAR(std::string str)
{
size_t size = str.length();
TCHAR* wArr = new TCHAR[size + 1];
for (size_t i = 0; i < size; ++i)
wArr[i] = str[i];
wArr[size] = '\0';

return wArr;
}

std::string convert_wstring_to_string(std::wstring wstr)
{
std::string str(wstr.begin(), wstr.end());

return str;
}

std::string convert_LPCWSTR_to_string(LPCWSTR l)
{
std::wstring ws(l);                                        //convert to wstring
std::string str = convert_wstring_to_string(ws); //convert to string

return str;
}

void MMF_write(LPCWSTR _pBuf, std::string str)
{
CopyMemory((PVOID)_pBuf, convert_string_to_TCHAR(str), get_TCHAR_length(str));
}

std::string MMF_read(LPCWSTR _pBuf)
{
return convert_LPCWSTR_to_string(_pBuf);
}

int main()
{
init_error = false;

std::string s = "xxxxxx_";
s = s + "454545" + "_mmf_" + "1";
std::wstring stemp = std::wstring(s.begin(), s.end());
szName = stemp.c_str();

//MMF
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL,                 // default security
PAGE_READWRITE,       // read/write access
0,                    // maximum object size (high-order DWORD)
BUF_SIZE,             // maximum object size (low-order DWORD)
szName);              // name of mapping object

if (hMapFile == NULL)
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79878326/c-write-to-memory-mapped-file-and-read-different-result-in-debug-and-release[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»