간단한 Ruby C 확장을 작성했습니다. 메서드는 두 번째 매개 변수가 문자열 ㅎ VALUE가 될 것으로 예상합니다.Ruby C 확장, 분할 오류를 복구하는 방법
VALUE method_foo(VALUE self, VALUE key) {
puts(RSTRING(key)->ptr);
return key;
}
문자열보다는 정수를 전달하여 세분화 오류가 발생하기 쉽습니다. 이를 어떻게 감지하고 C 방법으로 예방하거나 복구해야합니까? 또는 (당신이 예외를 발생보다는 뭔가 다른을 수행하려는 경우) 수동으로 확인 TYPE (key)
을 사용 (당신이 발생한 예외를 원하는 경우)
아무 것도 없습니다. 정보를 제공해 주셔서 감사합니다. 나는 이것들 중 하나를 http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html –
@Josh에 열거 할 수 없었습니다. 그것은 "포인터로서의 가치"에 있습니다 - 또한 http : //를보십시오. /clalance.blogspot.com.au/2011/01/writing-ruby-extensions-in-c-part-4.html – paxdiablo
당신은 API에 대해 옳습니다. 일부 "안전"에 대한 나의 주요 동기는 프로그램을 악의적으로 파괴하는 것을 더 어렵게 만드는 것입니다. 이 방법은 사용자 입력을 깨끗하게 처리하는 루비 계층에 맡기는 것이 좋습니다. (C 함수는 실제로 속도에 관한 것이므로). –