이 세그먼트 오류가 발생 V8의 sample.cc 샘플 쉘에 따라, 다음과 같은 코드 조각을 고려하십시오 : 나는 V8 후 V8 :: 배열을 인스턴스화하는 경우, 그러나왜 v8 :: String 이전에 새 v8 :: Array를 만들면 v8 :: String 및 v8 :: FunctionTemplate이 발생하지 않습니까?
int RunMain(int argc, char* argv[]) {
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
v8::HandleScope handle_scope;
// Create a template for the global object.
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
v8::Handle<v8::String> testStr = v8::String::New("test");
v8::Handle<v8::Array> testArr = v8::Array::New();
// Create a new execution environment containing the built-in
// functions
v8::Handle<v8::Context> context = v8::Context::New(NULL, global);
// Enter the newly created execution environment.
v8::Context::Scope context_scope(context);
return 0;
}
int main(int argc, char* argv[]) {
int result = RunMain(argc, argv);
v8::V8::Dispose();
return result;
}
을 :: 문맥을 인스턴스화하고 범위는 다음 코드가 세그 폴트하지 않는 설정 :
int RunMain(int argc, char* argv[]) {
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
v8::HandleScope handle_scope;
// Create a template for the global object.
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
v8::Handle<v8::String> testStr = v8::String::New("test");
// Create a new execution environment containing the built-in
// functions
v8::Handle<v8::Context> context = v8::Context::New(NULL, global);
// Enter the newly created execution environment.
v8::Context::Scope context_scope(context);
v8::Handle<v8::Array> testArr = v8::Array::New();
return 0;
}
int main(int argc, char* argv[]) {
int result = RunMain(argc, argv);
v8::V8::Dispose();
return result;
}
내 질문은 왜 첫 번째 예에서 V8 :: 배열의 원인이 세그 폴트 응용 프로그램을 인스턴스화 않습니다, V8 엔진을 만드는 :: 배열을 한 후에 반면, v8 :: 컨텍스트가 생성 되어도 응용 프로그램이 segfault를 발생시키지 않습니까? 그리고 컨텍스트가 생성되기 전에 v8 :: String을 인스턴스화하는 것이 응용 프로그램을 segfault로 만들지 않는 이유는 무엇입니까?
이 질문은 실제 쉘 응용 프로그램에서 배열을 인스턴스화하고 전역 컨텍스트 개체에 할당하려고하기 때문에 관련이 있습니다. 그러나 v8보다 먼저 컨텍스트를 만들어야하기 때문에 불가능합니다. : 배열을 인스턴스화하여 순환 종속성을 생성합니다.
누구든지 제공 할 수있는 지침을 알려 주시면 감사하겠습니다.