NSData dataWithBytesNoCopy activa guardMalloc cuando se libera

Consulte la actualización a continuación.

<s:element name="GetFile">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="User" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string />
    <s:element minOccurs="0" maxOccurs="1" name="ObjectId" type="s:string"/>
    </s:sequence>
    </s:complexType>
</s:element>
<s:element name="GetFileResponse">
    <s:complexType>
    <s:sequence>
    <!-- This is the return value -->
    <s:element minOccurs="0" maxOccurs="1" 
       name="GetFileResult" type="s:base64Binary"/>
    </s:sequence>
    </s:complexType>
</s:element>

Con el código generado por wsdl2objc, aparece un error con guard malloc habilitado:

GuardMalloc [eBridge-1115]: falla de zona de guard malloc: liberando un puntero que no asignamos que no fue reclamado por ninguna zona registrada
GuardMalloc [eBridge-1115]: ¡¡¡Capturando explícitamente en el depurador !!!

Este es el último código obj-c que puedo ver antes de que me caiga todo:

@implementation WebServices_GetFileResponse
- (void)dealloc
{
    [soapSigner release];
    //breaks on the line below
    if(GetFileResult != nil) [GetFileResult release];

    [super dealloc];
}

Creo que se está rompiendo en el objeto Response generado. deserializeElementsFromNode pero aún no lo he identificado. Esta no es una pregunta de "Depurar mi programa por mí". Mi pregunta es simplemente: ¿Alguien se ha encontrado con este problema con un tipo de retorno de matriz de bytes base64Binary generado por wsdl2objc?

Noticias


El problema que creo radica en

+ (id)dateWithBase64EncodedString;

en NSData (MBBase64) -

char *data = malloc(...);
NSUInteger length = 0;

... // fill data[length++];

realloc(data, length);
return [NSData dataWithBytesNoCopy:bytes length:length]; //offending line?

Estoy asumiendo que esto no hace que el tiempo de ejecución de objetivo-c reclame la memoria ... así que cuando estoy liberando el NSData, de alguna manera todavía está asignado con 'malloc'. ¿Alguien sabe mejor que yo?

preguntado el 20 de junio de 11 a las 21:06

1 Respuestas

En + (id) dateWithBase64EncodedString cambié la última línea a:

return [NSData dataWithBytesNoCopy:bytes length:length **freeWhenDone:NO**];

y pareció funcionar. Este es solo mi truco, pero si eres el autor de wsdl2objc lo ve, espero que te ayude.

Respondido el 21 de junio de 11 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.