小编Tyl*_*iss的帖子

在共享指针上看到意外数据

我正在尝试将nlohmann::json对象转换为std::shared_ptr<char[]>. 我遇到了一个问题,共享指针中的数据似乎附加了我原始对象中没有的额外垃圾。

下面的函数并不像它可能的那样简洁,因为我想展示我在调试器中看到的内容。您看到的注释是该行变量的值。我不明白这ÍýýýýÝÝÝÝÝ¡\x4\x1d'ýI是从哪里来的。我在这里做错了什么?

// Incoming json: {"data":[100]}
std::shared_ptr<char[]> serializeJson(nlohmann::json& d) {
    std::string ds = d.dump();                                // '{"data":[100]}'

    std::shared_ptr<char[]> rd(new char[ds.size() + 1]);     // 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýýÝÝÝÝÝ¡\x4\x1d'ýI'
    ds.copy(rd.get(), ds.size() + 1);                        // '{"data":[100]}ÍýýýýÝÝÝÝÝ¡\x4\x1d'ýI'

    return rd;
}
Run Code Online (Sandbox Code Playgroud)

我相信指针内的数据已被修改,因为当我尝试使用下面的函数对字符串进行反序列化时,出现异常。我也将值附加到此代码段中...

nlohmann::json deserializeJson(const std::shared_ptr<char[]>& d) {
    std::string p = d.get();                            // '{"data":[100]}ÍýýýýÝÝÝÝÝû¤¶¯´2'
    std::string e = p.substr(p.size()-10);              // 'ÝÝÝÝû¤¶¯´2'
    nlohmann::json nd = nlohmann::json::parse(p);       // kaboom! / Exception
    return nd;
}
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

c++ shared-ptr

1
推荐指数
1
解决办法
44
查看次数

WebGL 尝试访问属性 2 错误中超出范围的顶点

我知道这个问题已经被问了很多次,但没有一个解决方案真正适合我的情况。我希望使用下面所示的代码将第二种类型的对象添加到画布中。我知道我没有提供太多,但这是一个快速的开始。如果您认为自己有预感,请要求更多。下面的代码位于我的渲染函数中。

到目前为止我已经检查过

  1. 我的点数组中有足够的顶点
  2. 我的法线数组中有足够的法线向量
  3. 我的 texCoords 数组中有足够的纹理坐标
  4. 创建地形和螺旋桨时添加的矢量之间没有不匹配。

地形的纹理、光照等渲染得很好,但是我无法让螺旋桨渲染。我收到上面列出的错误。我之前曾向画布添加过多个对象,但从未遇到过这样的错误。

//----------------------------------------- Draw Terrain ------------------------------------
  var i = 0;
  for(var row=0-dimension; row<dimension; row+=3){
    for(var col=0-dimension; col<dimension; col+=3, i++){
      var mv = mult(viewer, mult(translate(row, -1, col), mult(scale[i],rot[i])));
      gl.uniformMatrix4fv(modelViewLoc, false, flatten(mv));
      gl.uniformMatrix3fv(normalLoc, false, flatten(normalMatrix(mv, true)));
      gl.drawArrays( gl.TRIANGLES, 0, index);
    }
  }

  //----------------------------------------- Draw Propeller ------------------------------------
  mv = mult(viewer, mult( translate(-2.1, -2.9, -.2), scalem(4,5,5)));
  gl.uniformMatrix4fv(modelViewLoc, false, flatten(mv));
  gl.uniformMatrix3fv(normalLoc, false, flatten(normalMatrix(mv, true)));
  gl.drawArrays( gl.TRIANGLES, propellerStart, points.length);
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用错误消息中的“属性 2”来追踪给我带来此问题的变量吗?

感谢您的帮助!

render webgl

0
推荐指数
1
解决办法
1856
查看次数

标签 统计

c++ ×1

render ×1

shared-ptr ×1

webgl ×1