Этот код не в отличной форме.Если вы запустите его в отладчике, вы быстро поймете, почему он останавливается, а это ....
string new_msg = NULL;
Это нарушение доступа, когда байты в 0 (NULL
) читаются, чтобы получитьstring.
Исправлено:
string new_msg; // default value is empty.
После того, как это удалено, есть пара необходимых изменений, чтобы приблизить код к предполагаемому поведению.
new_msg = "New Random Char is "+static_cast <char> (random);
Этоне работает, так как принимает адрес строки и добавляет к ней от 40 до 80 байт.Который перемещается из строки в какое-то «случайное место».Первоначальная совместимость с C здесь достигается, и правильный способ сделать то, что (я полагаю) предназначен для ...
new_msg = string("New Random Char is ") +static_cast <char> (random);
При преобразовании в std::string
, + теперь ведет себя как добавлениеоператор.
Наконец, в потребителе ...
string new_string = "producer produced " + m;
должно быть
new_string = "producer produced " + m;
В противном случае переменная new_string, которая используется для отслеживания результатов, не являетсятак же, как переменная, которая читает очередь.
Наконец, в моем тестировании потребитель не поспевал за производителем, и должна быть некоторая форма регулирования и конечного условия.