I have a piece of code that writes a string to memory, and I'm trying to modify it to write an array of booleans instead.
The idea is simply to write random boolean data to memory for every iteration.
Here's the method example that writes strings:
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());
}
Here's the non-working example that tries to write booleans:
void MemoryWriter::write(const bool * data) {
auto buffer = MapViewOfFile(m_shmHandler, FILE_MAP_ALL_ACCESS, 0, 0, m_memorySize);
CopyMemory(buffer, data, data.size());
}
And also, here the code that generates the random booleans. I know this works, because of the logging, and the result of this function is fed into the previous function.
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;
}
Here's the main function:
#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;
}
And here is the console output showing the random data being generated, and the different data coming out:
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
As you can see, the random data is being generated, but the result is always the same: 00AFFCE0. Despite not printing an array, I'd still expect it to be different everytime since the underlying data should be different
I think this may be an issue with CopyMemory but I'm not sure. Pointers and memory is still something I'm trying to learn, and I'm having a hard time figuring out this issue.
Any ideas?