Ниже приведен код, который я использовал для отправки данных через MQTT по каждому четному индексу при итерации для l oop,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MQTTClient.h"
#include <jansson.h>
char* s;
void sendMQTT(char *s){
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc;
MQTTClient_create(&client, "tcp://localhost:1883", "client-pub",
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
pubmsg.payload = s;
pubmsg.payloadlen = (int)strlen(s);
pubmsg.qos = 1;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, "mqtt-ex", &pubmsg, &token);
rc = MQTTClient_waitForCompletion(client, token, 10000L);
// printf("Message with delivery token %d delivered\n", token);
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
// return rc;
// return 0;
}
int main() {
json_t *root = json_object();
char myNum[10] = {10, 20, 10, 40, 10, 60, 10, 80, 10, 100};
for(int i=0; i<10;i++)
{
if(i%2==0)
{
// sendMQTT(s);
free(s);
json_decref(root);
json_t *root = json_object();
}
char *key= (char*)malloc(2);
snprintf(key, sizeof(key), "%d", myNum[i]);
json_object_set_new( root, key, json_integer(i));
char *s= (char*)malloc(100);
s = json_dumps(root, 0);
printf("s :: %s\n", s);
free(key);
// puts(s);
}
}
Приведенный выше код дает ожидаемый результат, как показано ниже,
s :: {"10": 0}
s :: {"10": 0, "20": 1}
s :: {"10": 2}
s :: {"10": 2, "40": 3}
s :: {"10": 4}
s :: {"10": 4, "60": 5}
s :: {"10": 6}
s :: {"10": 6, "80": 7}
s :: {"10": 8}
s :: {"10": 8, "100": 9}
Тогда как, когда я вызываю функцию sendMQTT для каждого четного индекса, процесс завершается ошибкой сегментации. Чего не хватает в приведенном выше процессе, что приводит к ошибке сегментации? Как решить эту проблему?