com 래퍼가있는 C# 코드가 있습니다. 이 com 래퍼는 네이티브 C++ 응용 프로그램에서 사용됩니다. C++ 코드는 C# 라이브러리에서 클래스의 인스턴스 배열을 반환하는 메서드를 사용합니다.SafeArrayGetElem 호출에서 사용 가능한 메모리가 있습니까?
for (long i =min; i<=max;i++)
{
IMyInterface *l = (IMyInterface *)malloc(sizeof IMyInterface);
SafeArrayGetElement(array,&i, &l);
<other code>
}
내가 인스턴스 리터에 할당 된 메모리를 해제하기를 원하지만 그때
free(l)
를 호출하면 나는 충돌을 얻을 : 인스턴스 그래서 같은 SafeArray는에서 온다.
나는
VariantClear ((VARIANT*)l);
및
SafeArrayDestroy(array)
를 사용을 시도했지만 여전히 배열의 각 인스턴스에 대해 4 바이트를 유출하고있다.
이 메모리를 확보하는 방법에 대한 아이디어가 있습니까?
고마워, 내가 읽었던 부분은 복사 할 요소에 대한 메모리를 할당하는 것이 사용자의 책임이라는 말을했지만 실제로는 효과가있는 것으로 보인다. –
배열에 포인터가 4 바이트 밖에 없으므로 포인터 변수의 주소를 스택에 전달하는 것으로 충분합니다. 설명서가 약간 잘못되었을 수도 있습니다. 배열에 더 큰 객체가 있으면 필요한만큼의 메모리를 할당해야합니다. – DavidK