Я изо всех сил стараюсь найти хороший способ заполнить буфер новыми данными. У меня есть поток, производящий данные со звуковой карты, и я хочу поделиться этими данными с другими потоками через общий объект под названием Rawcontainer. Контейнер содержит мьютекс и ringbuffer, но когда я пытаюсь заполнить буфер, я заметил, что объекты, которые я заполняю буфером, имеют одинаковый адрес памяти, что делает весь буфер бесполезным.
void useBuffer(){
//Create a new "OBject" (struct) each time this methos is called??
SoundData *p = new SoundData();
//Copy the data of the sound into the the struct data field
memcpy(p->data, soundCopy, 2048*sizeof(double) );
//Put the struct into the buffer and forget about it?
Rawcontainer->writeRaw(p);
//This should print a differnt adress each time the method is called?, but it dosent!
std::cout << "Adressse fra Streamhandler: " << &p <<'\n';
}
Вы должны печатать только p
, not &p
, так как p
уже содержит адрес новой структуры. То, что вы делаете, это печать адреса переменной p
, которая может быть очень простой при каждом вызове функции.
использование
std::cout << "Adressse fra Streamhandler: " << p <<'\n';
вместо
std::cout << "Adressse fra Streamhandler: " << &p <<'\n';
p уже является указателем. Вам не нужно здесь, чтобы принять его адрес.
p
, указатель. Вы печатаете&p
aka "гдеp
хранится", который может быть одинаковым каждый раз