Daten in SAFEARRAY freigeben



  • Hallo zusammen!

    Ich stehe vor dem Problem, dass ein Prozess immer mehr Speicher verbraucht. Ich bin dahintergekommen, dass verm. ein SAFEARRAY bzw. die darin gespeichert oder referenzierten Daten nicht suaber freigegeben wird und deshalb der Speicherverbrauch ansteigt. Folgendes wird bisher gemacht:

    SAFEARRAYBOUND		rgsabound[1];
    SAFEARRAY			*psaAttributeSymbols = NULL;
    
    h_Result = o_ITNCTable->ReceiveTableLines(o_QuellFile, o_SQLCommand, &psaAttributeSymbols);
    
    if(SUCCEEDED(h_Result))
    {
    	long lLBound;
    	long lUBound;
    	long lIndex;
    	long ii;
    	CComBSTR     AttributeSymbol;
    
    	if ( (SafeArrayGetDim(psaAttributeSymbols) == 1)
    	  && (SafeArrayGetLBound(psaAttributeSymbols, 1, &lLBound) == S_OK)
    	  && (SafeArrayGetUBound(psaAttributeSymbols, 1, &lUBound) == S_OK)
    	)
    	{
    		AttributeSymbol.Empty();
    		for (ii = lLBound; ii <= lUBound; ii++)
    		{
    			lIndex = ii;
    
    			h_Result = SafeArrayGetElement(psaAttributeSymbols, &lIndex, &AttributeSymbol);
    
    			if(SUCCEEDED(h_Result))
    			{
    				_bstr_t o_String = AttributeSymbol;
    
    				....
    			}
    			else
    			{
    				i_LastError = GetLastError();
    
    				// Schleife abbrechen
    				break;
    			}
    			AttributeSymbol.Empty();
    		}
    	}
    }
    
    SafeArrayDestroyData(psaAttributeSymbols);
    

    Passt das so oder was mache ich falsch??

    Vielen Dank für jeden Tipp

    Armin





  • Schaut nicht falsch aus. Die Frage ist nur, ob vielleicht vor dem SafeArrayDestroyData eine Exception geworfen wird.



  • Nein, Exceptions werden keine geworfen, läuft alles problemlos (wenn man vom Speicherverbrauch mal absieht)


Anmelden zum Antworten