Почему при запуске примера публикации ZMQ я получаю сообщение об ошибке «Обнаружено разрушение стека ***»? - PullRequest
0 голосов
/ 17 июня 2019

Я запускаю простой пример публикации ZMQ на материнской плате Intel.Моя версия ZMQ - 4.2.3.В первоначальном примере был цикл while, я просто заменил его на цикл for.В конце цикла for я получаю ошибку «стек разбит».

#include <zmq.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <iostream>

#define within(num) (int) ((float) num * random () / (RAND_MAX + 1.0))

int main () {

    //  Prepare our context and publisher
    zmq::context_t context (1);
    zmq::socket_t publisher (context, ZMQ_PUB);
    publisher.bind("tcp://127.0.0.1:5556");

    //  Initialize random number generator
    srandom ((unsigned) time (NULL));
    //while (1) {
    for (int i = 0; i < 5; ++i)
    {

        int zipcode, temperature, relhumidity;

        //  Get values that will fool the boss
        zipcode     = within (100000);
        temperature = within (215) - 80;
        relhumidity = within (50) + 10;

        //  Send message to all subscribers
        zmq::message_t message(20);
        snprintf ((char *) message.data(), 20 ,
            "%05d %d %d", zipcode, temperature, relhumidity);
        publisher.send(message);
        std::cout << "printing" << std::endl;

    usleep(10000);


    }
    return 0;
}

Я скомпилировал ее с помощью следующей команды:

 g++ -Wall pub2.cpp -o pub22 -L/usr/local/lib -lzmq

Ниже приведен вывод консоли:

printing
printing
printing
printing
printing
*** stack smashing detected ***: ./pub22 terminated
Aborted (core dumped)

Я не могу понять ошибку "разбитый стек".Мое понимание ограничено этой ошибкой, пожалуйста, дайте мне знать, что я делаю неправильно.Заранее спасибо.

...