Ошибка strdup: «Операция сейчас выполняется» - PullRequest
0 голосов
/ 22 ноября 2011

Что означает ошибка? Мне просто нужно вернуть значение, которое я получаю из команды redis.

int getReply(char* result)
{
   redisContext *c;
   redisReply *reply;

   c = redisConnect((char*)"127.0.0.2", 6379);
   reply = redisCommand(c,"GET %s", "somekey");
   if (reply->str != NULL)
   {
       result = strdup(reply->str); 
       strerror(errno); // <-------- 'Operation now in progress'. result = null
   }

   freeReplyObject(reply);

   reply = redisCommand(c, "QUIT");
   printf("Disconnecting redis: %s\n", reply->str);

   freeReplyObject(reply);

   return 0;  
}

Это происходит, даже если я медленно перехожу через него с помощью отладчика (можно было бы предположить, что любое блокирующее действие уже давно закончилось). Отдельные строки ошибок Redis пусты, ответ-> str содержит правильную строку, которую я хочу.

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Ошибка только , когда strdup возвращает NULL.

Я думаю, что вы хотите

       result = strdup(reply->str); 
       if (!result) strerror(errno);
0 голосов
/ 22 ноября 2011

Ладно, для всех, кто следит за этим: это плохо, мне нужно передать адрес указателя, иначе он просто передаст значение.Так что сделайте это так:

int getReply(char** result)
{
  *result = "yes";
}
...