Создание новой структуры несколько раз

0

Я изо всех сил стараюсь найти хороший способ заполнить буфер новыми данными. У меня есть поток, производящий данные со звуковой карты, и я хочу поделиться этими данными с другими потоками через общий объект под названием 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';
}
  • 4
    Вы хотите напечатать p , указатель. Вы печатаете &p aka "где p хранится", который может быть одинаковым каждый раз
  • 0
    Ага! большое спасибо. Но если другой поток читает с того же адреса, куда я помещаю новые данные, возникнет проблема? Это все новое для меня это указатели и прочее ..
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Вы должны печатать только p, not &p, так как p уже содержит адрес новой структуры. То, что вы делаете, это печать адреса переменной p, которая может быть очень простой при каждом вызове функции.

0

использование

std::cout << "Adressse fra Streamhandler:  " << p <<'\n';

вместо

std::cout << "Adressse fra Streamhandler:  " << &p <<'\n';

p уже является указателем. Вам не нужно здесь, чтобы принять его адрес.

  • 0
    Спасибо! Есть ли у вас опыт выделения памяти в одном потоке и удаления ее в другом?
  • 0
    Вы хотите предложить мне работу? Если нет, вы должны начать с поиска в Google. Эта ссылка может быть началом en.cppreference.com/w/cpp/thread/lock .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню