c++给node写组件,c++中要用到一个比较大的字符串,编译没问题,但测试时运行就会出错
如下是一个简单的测试代码,实现字符串格式的数字加法:
//add.cc
#include <node.h>
#include <v8.h>
#include <iostream>
#include <windows.h>
#define MAX_LEN 2048000
using namespace v8;
using std::cout;
using std::endl;
Handle<Value> Max(const Arguments& args)
{
HandleScope scope;
if (args.Length() < 2)
{
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
}
if (!args[0]->IsString() || !args[1]->IsString())
{
ThrowException(Exception::TypeError(String::New("Wrong arguments")));
return scope.Close(Undefined());
}
char szTemp1[MAX_LEN] = {0};
char szTemp2[MAX_LEN] = {0};
Local<String> str1 = args[0]->ToString();
Local<String> str2 = args[1]->ToString();
str1->WriteUtf8(szTemp1);
str2->WriteUtf8(szTemp2);
Local<Number> num = Number::New(atoi(szTemp1) + atoi(szTemp2));
return scope.Close(num);
}
void Init(Handle<Object> exports)
{
exports->Set(String::NewSymbol("add"),FunctionTemplate::New(Max)->GetFunction());
}
NODE_MODULE(add, Init)
//test.js
var addon = require('./build/Release/add');
console.log(addon.add('3','4'));
发现把add.cc中的MAX_LEN改小一点就没问题了,但实际项目中,需要c++中定义很大的字符串,这个要怎么解决呢?请各位大神帮帮忙!不胜感激!
4 回复
大家有好的解决方案吗?遇到这种问题该怎么解决啊?
char szTemp1[MAX_LEN] = {0};
数组在stack空间 stack空间大小有限制 不能太大 改进的方法:使用 new 分配heap空间 大小可以上GB tips:记得delete
可能是栈(stack)溢出了,linux下最大16M,还可以,windows下估计就溢出了。
char szTemp1[MAX_LEN] = {0};
char szTemp2[MAX_LEN] = {0};
这两句是分配在栈上的,你用new分配到堆(heap)上试一试。
不管如何,大内存分配最好都分配在堆(heap)上,c++用new/delete,c用malloc/free。
试了一下,用new就ok了,谢谢各位大神!