0

考虑如下所示的代码片段

            const char* jstring;
            jstring =  net->Classify(224, 224, imgCUDA,  &confidence);
            std::cout <<jstring << std::endl;
            join_prop = json_tokener_parse( jstring);
            printf("join prop is %s\n",json_object_to_json_string(join_prop));

在创建和返回 json 的位置调用 Classify。分类方法的定义是

const char* Classify(  uint32_t width, uint32_t height,  float* rgb, float* confidence=NULL);

Classify 中的代码片段如下所示

    jstring =  json_object_to_json_string(properties);
    std::string jstring_str(jstring);
    json_object_put(properties);
    std::cout<< "jstring_str is : "<<jstring_str << std::endl;
    return jstring_str.c_str();

输出在此代码段的不同点打印到屏幕上。输出如下

  1. 在返回之前对 jstring_str 的值进行分类

    jstring_str 是:{“head_gear”:[{“confidence”:0.000000,“name”:“None”},{“confidence”:1.000000,“name”:“Cap”},{“confidence”:0.000000,“name “: “头盔” } ] }

来自语句的 jstring 的 2 值std::cout <<jstring << std::endl;

{ "head_gear": [ { "confidence": 0.000000, "name": "None" }, { "confidence": 1.000000, "name": "Cap" }, { "confidence": 0.000000, "name": "Helmet" } ] }
  1. 但是,在 join_prop 的命令下,似乎有一个意外的输出,如下所示

加入道具为空

我曾期望令牌器解析 jstring 并将其转换为 json。如果我能对为什么我将 join prop 设为 null 有所了解,那将非常有帮助。任何见解都会有所帮助,因为我在试图找到原因时迷失了方向。

输出似乎是基于https://jsonformatter.curiousconcept.com/的有效 json

4

1 回答 1

0

这与 json-c 无关,您只是在滥用 str::string。具体来说:

std::string jstring_str(jstring);
...
return jstring_str.c_str();

当您返回并离开该“分类”函数的范围时,jstring_str 对象将被销毁,并且 c_str() 调用返回的内存将不再有效。

于 2019-03-11T03:31:42.923 回答