CopyMemory 给出分段错误
CopyMemory gives segmentation fault
我的程序应该通过控制台获取输入并使用共享内存,以便另一个进程可以访问输入。
显然 CopyMemory
导致了分段错误。
std::string Input;
std::cout << "What Text do you want to encrypt? ";
std::getline(std::cin, Input);
//create named shared memory
HANDLE shmMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 256, _T("shared_mem"));
//view the mapped memory (makes adress space visible)
LPCTSTR shmBuffer = (LPTSTR)MapViewOfFile(shmMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 256);
//Copy Input into shared memory. c_str converts string to pointer to char array
CopyMemory(shmMapFile, Input.std::string::c_str(), 256);
我想应该和指针有关,但我找不到错误的原因。
那么我哪里出错了?还是我功能使用不当?
提前致谢!
编辑:
将 256
更改为 Input 的实际大小没有帮助
编辑 2:
我试图将问题最小化,以便您可以 运行 自己解决:
#include <iostream>
#include <windows.h>
#include <tchar.h>
int main()
{
char buffer[6] = "Hello";
HANDLE shmMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 6, _T("shared_mem"));
if (!shmMapFile == 0)
std::cout << shmMapFile << "(CreateFileMapping) Error: "<< GetLastError() << std::endl;
LPCTSTR shmBuffer = (LPTSTR)MapViewOfFile(shmMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 6);
if(!shmBuffer == 0)
std::cout << shmBuffer << "(MapViewOfFile) Error: " << GetLastError() << std::endl;
if (!CopyMemory(shmMapFile, buffer, 6) == 0)
std::cout << "(CopyMemory) Error: " << GetLastError() << std::endl;
}
CopyMemory
的第一个参数应该是 shmBuffer
,而不是句柄。 HANDLE 从表面上看是一种指针数据类型,但取消引用它肯定会导致访问冲突。
我的程序应该通过控制台获取输入并使用共享内存,以便另一个进程可以访问输入。
显然 CopyMemory
导致了分段错误。
std::string Input;
std::cout << "What Text do you want to encrypt? ";
std::getline(std::cin, Input);
//create named shared memory
HANDLE shmMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 256, _T("shared_mem"));
//view the mapped memory (makes adress space visible)
LPCTSTR shmBuffer = (LPTSTR)MapViewOfFile(shmMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 256);
//Copy Input into shared memory. c_str converts string to pointer to char array
CopyMemory(shmMapFile, Input.std::string::c_str(), 256);
我想应该和指针有关,但我找不到错误的原因。 那么我哪里出错了?还是我功能使用不当?
提前致谢!
编辑:
将 256
更改为 Input 的实际大小没有帮助
编辑 2: 我试图将问题最小化,以便您可以 运行 自己解决:
#include <iostream>
#include <windows.h>
#include <tchar.h>
int main()
{
char buffer[6] = "Hello";
HANDLE shmMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 6, _T("shared_mem"));
if (!shmMapFile == 0)
std::cout << shmMapFile << "(CreateFileMapping) Error: "<< GetLastError() << std::endl;
LPCTSTR shmBuffer = (LPTSTR)MapViewOfFile(shmMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 6);
if(!shmBuffer == 0)
std::cout << shmBuffer << "(MapViewOfFile) Error: " << GetLastError() << std::endl;
if (!CopyMemory(shmMapFile, buffer, 6) == 0)
std::cout << "(CopyMemory) Error: " << GetLastError() << std::endl;
}
CopyMemory
的第一个参数应该是 shmBuffer
,而不是句柄。 HANDLE 从表面上看是一种指针数据类型,但取消引用它肯定会导致访问冲突。