오류, 버그, 질문 - 페이지 2571

 
스크립트가 끝난 후 전문가 로그의 경고는 무엇을 의미합니까?
 2 leaked strings left

이것은 어떻게 치료할 수 있습니까?
번역기 번역, 왼쪽에 두 줄 누수. 그러나 무엇의 왼쪽에 선이 명확하지 않습니까?

스크립트는 JAson 라이브러리를 사용합니다.
Json 문자열은 memcpy_s를 통해 dll에서 수신됩니다. dll에서 이 문자열의 유형은 const wchar_t *입니다.
#import에서 내보낸 함수의 매개변수는 string & str, 즉 참조로 선언되며, 문자열 자체는 string str로 선언됩니다.
다음으로 문자열 str이 역직렬화됩니다.

js.Deserialize(str); 

문제는 memcpy_s에서 들어오는 라인의 역직렬화에 있습니다.

스크립트에서 테스트 json 문자열을 생성하면

 string str = "{\"s\":\"1000\"}" ;

경고 메시지가 나타나지 않습니다.
dll에서 들어오는 문자열을 역직렬화합니다. 스크립트가 끝난 후 경고가 다시 나타납니다. 2개의 누출된 문자열이 남습니다.

들어오는 문자열을 char 배열 StringToCharArray로 변환하고 char 배열을 역직렬화하려고 했습니다.
하지만 문제는 남아있고, 2개의 남은 문자열도 남게 됩니다.
이유는 무엇입니까?

 
dll에서 테스트 json 문자열 을 명시적으로 전달하려고 했습니다.
 L"{\"s\":\"1000\"}"
경고 2개의 누출된 문자열이 남아 있습니다.
dll에서 네트워크 데이터를 읽는 기능이 이 동작을 일으키는 것으로 나타났습니다.
그러나
유출된 문자열 2개에 대한 해석 자체가 명확하지 않습니다. 구체적으로 무엇을 의미하며 어디 에서 더 파헤쳐야 할까요?
 
Roman :
dll에서 테스트 json 문자열 을 명시적으로 전달하려고 했습니다.
경고
2개의 누출된 문자열이 남아 있습니다.
dll에서 네트워크 데이터를 읽는 기능이 이 동작을 일으키는 것으로 나타났습니다.
그러나
유출된 문자열 2개에 대한 해석 자체가 명확하지 않습니다. 구체적으로 무엇을 의미하며 어디 에서 더 파헤쳐야 할까요?

비언어적 번역인 경우 "2줄로 인해 메모리 누수가 발생합니다."

그리고 말 그대로 - 다음과 같습니다. 현재 2줄이 남습니다.

 

iHigh, iTime 기능 은 테스터의 최신 MT4 빌드에서 일일 것보다 높은 시간 프레임에서 작동하지 않습니다.

 iHigh ( NULL , PERIOD_W1 , 0 ) = 0
iTime( NULL , PERIOD_W1 , 0 ) = NULL


 
Artyom Trishkin :

비언어적 번역인 경우 "2줄로 인해 메모리 누수가 발생합니다."

그리고 말 그대로 - 다음과 같습니다. 현재 2줄이 남습니다.

흥미로운 점은 Json 문자열을 수신하고 역직렬화하지 않고 주석에 표시합니다. 완전히 그대로이므로 누출이 없습니다.
문자열의 Json 요소를 가져오기 위해 역직렬화를 시작하면 흐름이 시작됩니다.
라이브러리가 누수되고 있는지 확실하지 않습니다 ...

 
Roman :

흥미로운 점은 Json 문자열을 수신하고 역직렬화하지 않고 주석에 표시합니다. 완전히 그대로이므로 누출이 없습니다.
문자열의 Json 요소를 가져오기 위해 역직렬화를 시작하면 흐름이 시작됩니다.
라이브러리가 누수되고 있는지 확실하지 않습니다 ...

흐르는. 문자열에 대한 메모리 가 할당되고 바이트가 복사되고 메모리가 지워지지 않습니다.

출처가 있습니까?

개발자는 메모리 관리자가 추적하는 내용을 존중합니다.

 
Vladimir Simakov :

흐르는. 문자열에 대한 메모리가 할당되고 바이트가 복사되고 메모리가 지워지지 않습니다.

출처가 있습니까?

개발자는 메모리 관리자가 추적하는 내용을 존중합니다.

예, 라이브러리의 Deserialize 클래스 메서드에서 Clear()가 호출된 것 같습니다.

 virtual bool  Deserialize ( string js, int acp = CP_ACP )
{
   int i = 0 ;
   Clear ();
   CJAVal::code_page = acp;
   char arr [];
   int slen = StringToCharArray (js, arr, 0 , WHOLE_ARRAY , CJAVal::code_page);
   return Deserialize (arr, slen, i);
}

출처는 여기에서 가져왔습니다 .

 
Roman :

예, 라이브러리의 Deserialize 클래스 메서드에서 Clear()가 호출된 것 같습니다.

출처는 여기에서 가져왔습니다 .

누출은 거기에 없지만 가장 가능성이 높은 것은 라인을 얻은 dll에 있습니다.

[삭제]  
Roman :

예, 라이브러리의 Deserialize 클래스 메서드에서 Clear()가 호출된 것 같습니다.

출처는 여기에서 가져왔습니다 .

CJVal은 어떻게 만드나요? 아마도 새로운 CJVal()?

누출은 거기에 없지만 가장 가능성이 높은 것은 라인을 얻은 dll에 있습니다.

터미널이 이것을 잡을 가능성은 거의 없습니다.
 
Vladimir Simakov :

누출은 거기에 없지만 가장 가능성이 높은 것은 라인을 얻은 dll에 있습니다.

데이터를 읽는 기능이 누수되고 있다는 인상도 받았습니다.
먼저 데이터를 버퍼링한 다음 전송하고 전송 후 개발자에 따라 버퍼가 지워집니다.
그러나 분명히 이 버퍼를 지우는 데 문제가 있습니다.
그러나 흥미로운 점은 스크립트에서 문자열을 역직렬화하지 않으면 누수가 발생하지 않는다는 것입니다. 즉, 스크립트에서 역직렬화할 때 문제가 발생합니다.
가능한 원인에 대해 다른 가능성을 테스트 중입니다.
불행히도 lib .lib가 닫혀 있기 때문에 소스가 없습니다.