C++ RAPIDJSON错误:FILE():无效的下一个大小(正常)

C++ RAPIDJSON错误:FILE():无效的下一个大小(正常),c++,rapidjson,C++,Rapidjson,我正在读取JavaScript上的数据,并将Jsonstring如下传递给Web服务器:{data_size:500,array:[0,0,0,0,…,0,0]}。数组中的数字可以是0到4294967295之间的任何数字 在Mongoose Web服务器上,我使用lib rapidjson来处理Jsonstring。因此,我创建了一个文档d,并使用以下方法将jsonstring中的值读取到uint32\t数组中: #include "rapidjson/document.h" in

我正在读取JavaScript上的数据,并将Jsonstring如下传递给Web服务器:{data_size:500,array:[0,0,0,0,…,0,0]}。数组中的数字可以是0到4294967295之间的任何数字

在Mongoose Web服务器上,我使用lib rapidjson来处理Jsonstring。因此,我创建了一个文档d,并使用以下方法将jsonstring中的值读取到uint32\t数组中:

   #include "rapidjson/document.h"

   int i_data_size=0;
   Document d;

   conn->content[conn->content_len]=0;  //to zero terminate

   if (d.Parse(conn->content).HasParseError())
    {
         //Error
    }
    else
    {


     Value& s = d["data_size"];
     i_data_size=s.GetInt();


       uint32_t *Data=NULL;
       Data=new uint32_t[i_data_size];
       Value& a = d["array"];

       for(SizeType i=0;i<a.Size();i++)
       {
         Data[i]=a[i].GetUint();
       }
    }
conn->内容包含json字符*

当我发送时:{data_size:500,array:[0,0,0,0,…,0,0]}一切正常。但有时,并非每次,当a数变大时,如下所示: {数据大小:500,数组:[123222,0,0,…,0,0]}

我得到一个错误:


空闲:无效下一个正常大小

此错误与rapidJson无关,它来自C,显示原因是内存管理有问题。C++语言的继承人不会检查任何关于内存管理的东西,因为它应该是快的,并且会信任你。正因为如此,你所犯的错误不仅会告诉你到底出了什么问题。在您的代码中,您使用的是一个数组,但是您没有很好地管理它的边界,请仔细检查您在读写该无符号数组时所做的工作,或者更仔细地检查边界,或者使用像std::vector这样的容器,这将为您做到这一点。请看这里:

解决了这个问题

在边界外写入零是导致错误的原因:

conn->content[conn->content_len]=0;  //to zero terminate
改为使用字符串解决了此问题:

  string json="";
    json = string(conn->content);
    json=json.substr(0,conn->content_len);

  if (d.Parse(json.c_str()).HasParseError())
  { ...

当崩溃发生时,a.Size的值是多少?我敢打赌这个尺寸超过500。你有没有理由不使用,比如向量,推回数值,让它根据需要增长?你在哪一行得到这个错误?我认为您阅读文档的方式没有任何问题,除非json文档中的数组大小大于500.a.size=500。当我第一次发送{array:[0,0,0,0,0,0,0,…,0]}然后将任何数字更改为{array:[1111,0,0,0,0,0,…,0]}时,问题随时会出现。请更清楚地解释一下您是如何更改的?我认为您提供的代码并不是您实际正在做的所有事情,请完成您的示例代码,这样我们就可以准确地了解您正在做的事情