我有一段代码将一个字符串写入内存,我正试图修改它来编写一个布尔数组。
这个想法很简单,就是每次迭代都将随机布尔数据写入内存。
下面是编写字符串的方法示例:
void MemoryWriter::write(const string& data) {
auto buffer = MapViewOfFile(m_shmHandler, FILE_MAP_ALL_ACCESS, 0, 0, m_memorySize);
CopyMemory(buffer, data.c_str(), data.size());
}
下面是一个试图编写布尔值的非工作示例:
void MemoryWriter::write(const bool * data) {
auto buffer = MapViewOfFile(m_shmHandler, FILE_MAP_ALL_ACCESS, 0, 0, m_memorySize);
CopyMemory(buffer, data, data.size());
}
bool* MemoryWriter::createRandomArduinoPinData() const {
bool data[12];
for (size_t i = 0; i < m_memorySize; i++) {
data[i] = getRandomBool();
std::cout << "C++: RandomArduinoPinData " << data[i] << std::endl;
}
return data;
}
主要功能如下:
#include "stdafx.h"
#include "MemoryWriter.h"
#include <iostream>
#include <string>
#include <thread>
int main()
{
std::wstring memoryName{ L"shm_1" };
size_t memorySize{ 12 * sizeof(bool) };
MemoryWriter writer(memoryName, memorySize);
while (true) {
bool* data;
//data = writer.createRandomData();
data = writer.createRandomArduinoPinData(); // <-- this generates the random bool array and is confirmed to work
writer.write(data); <-- for some reason, this part doesn't receive the same array
std::cout << "C++: Written in shm - " << data[0] << data[1] << data[2] << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
return 0;
}
这里是控制台输出,显示正在生成的随机数据,以及输出的不同数据:
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: Written in shm - 00AFFCE0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: Written in shm - 00AFFCE0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 1
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 0
C++: RandomArduinoPinData 1
C++: Written in shm - 00AFFCE0
我想这可能是复写记忆的问题,但我不确定。指针和记忆仍然是我努力学习的东西,我很难解决这个问题。
有什么想法吗?