我认为这个问题与this one类似,我对问题的解答大部分都有,但我仍有问题:
首先是C代码:
emcc -o writebmp.js dummyCode\cwrapCall.cxx -s EXPORTED_FUNCTIONS="['_fillArray']"
我将指向数组的指针传递给我的C函数并用一些信息填充它。我用
编译这段代码<!doctype html>
<html>
<script src="writebmp.js"></script>
<script>
fillArray = Module.cwrap('fillArray', null, ['number', 'number']);
var nByte = 4
var length = 20;
var buffer = Module._malloc(length*nByte);
fillArray(buffer, length);
for (var i = 0; i < length; i++)
{
console.log(Module.getValue(buffer+i*nByte));
}
</script>
</html>
我的html / js代码如下:
1)vi /etc/ssh/sshd_config
#Port 22
Port 2292
2)reboot
当我运行脚本时,我得到的输出是正确的,直到第12个元素,之后它是垃圾。缓冲区I malloc是否太小?
答案 0 :(得分:3)
Module.getValue
接受一个可选的第二个参数,表示“指针”应被解除引用的类型,默认情况下为'i8'
,这意味着32位有符号整数被解引用为8位整数所以你不会得到垃圾,但要包装错误。
修复这个很简单,你只需要指定传递给Module.getValue
的'指针'应该被解引用为32位有符号整数:
console.log(Module.getValue(buffer+i*nByte, 'i32'));
将fillArray
的声明更改为
#include <stdint.h>
void fillArray(int32_t* a, int32_t len)
可以找到emscripten文档的重要部分here