【问题标题】:emscripten: How to delete memory of std::vector allocated in C++ codeemscripten:如何删除在 C++ 代码中分配的 std::vector 内存
【发布时间】:2018-01-25 09:24:56
【问题描述】:

我想知道如何正确删除c++代码中分配的std::vector的内存并作为函数返回传递给js。

我的 C++ 代码是

#include <vector>
#include <emscripten/bind.h>

using namespace emscripten;

std::vector<int> intArrayToVector(uintptr_t input, int num){
std::vector<int> vec;
const int* ptr = reinterpret_cast<int*>(input);
for(int i=0; i<num; i++){
    int val = *(ptr+i);
    vec.push_back(val);
}
return vec;
}

EMSCRIPTEN_BINDINGS(test){
register_vector<int>("VectorInt");
function("intArrayToVector", &intArrayToVector, allow_raw_pointer<arg<0>>());  
}

我的html代码是

<html>
<body>
 <script src="test.js"></script>
 <script>
   var num = 6;
   var buf = Module._malloc(100);
   var arr = new Int8Array(num);
   for(var i=0; i<num; i++){
      arr[i] = i+2;
   }
Module.HEAP8.set(arr, buf);
var v = Module.intArrayToVector(buf, num);

for(var i=0; i<num; i++){
    console.log(v.get(i));
}
Module._free(buf);

v.resize(0, 0);
v.delete();  
v = {};
</script>
</body>
</html>

我尝试了以下代码来删除分配的内存,但没有任何反应。

v.resize(0, 0);
v.delete();  
v = {};

【问题讨论】:

    标签: javascript google-chrome v8 emscripten asm.js


    【解决方案1】:

    我认为v.delete() 有效。

    for (var j = 0;; j++) {
        var v = Module.intArrayToVector(buf, num);
    
        for(var i=0; i<num; i++){
            console.log(v.get(i));
        }
    }
    

    以上无限循环被Cannot enlarge memory arrays.中止

    但是v.delete() 在循环结束时,这个程序不会停止。

    【讨论】:

    • 感谢您的回复。我的问题在下面的代码中。调整“std::vector edges”的大小后,它不会释放内存。如果我使用“struct Edge edges = new struct Edge[nEdges];删除[] 边; edges = NULL;" 没有内存泄漏 ** std::vector GetFeatureEdges(float fCreaseAngle, uintptr_t input, int nTriangles, bool bBoundaryEdgesOnly) { std::vector edges; const float coords = reinterpret_cast(input); int nEdges = 3 * nTriangles; edges.resize(nEdges); ** 你有什么想法吗?
    • 谢谢,请查看此链接以获取我的代码Click Here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2015-09-24
    相关资源
    最近更新 更多