Я запускаю простой пример публикации 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)
Я не могу понять ошибку "разбитый стек".Мое понимание ограничено этой ошибкой, пожалуйста, дайте мне знать, что я делаю неправильно.Заранее спасибо.