我正在努力寻找一种用新数据填充缓冲区的好方法。我有一个线程从声卡产生数据,我想通过一个名为Rawcontainer的共享对象与其他线程共享这些数据。容器中有一个互斥锁和一个环形缓冲区,但是当我尝试填充缓冲区时,我注意到我填充缓冲区的对象都具有相同的内存地址,使得整个缓冲区无用。
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';
}
答案 0 :(得分:1)
您应该只打印p
,而不是&p
,因为p
已经包含新结构的地址。您正在做的是打印p
变量的地址,每次调用该函数时都很容易相同。
答案 1 :(得分:0)
使用
std::cout << "Adressse fra Streamhandler: " << p <<'\n';
而不是
std::cout << "Adressse fra Streamhandler: " << &p <<'\n';
p已经是一个指针。你不需要在这里取其地址。