【问题标题】:NSData dataWithBytesNoCopy triggers guardMalloc when releasedNSData dataWithBytesNoCopy 释放时触发guardMalloc
【发布时间】:2011-06-20 21:29:14
【问题描述】:

请看下面的更新

<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>

使用从 wsdl2objc 生成的代码,我得到一个启用保护 malloc 的错误:

GuardMalloc[eBridge-1115]:守卫 malloc 区域失败:释放指针 我们没有分配那不是 被任何注册区域声明
GuardMalloc[eBridge-1115]:显式 陷入调试器!!!

这是我能看到的最后一个 obj-c 代码,在它全部变成 asm 之前:

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

    [super dealloc];
}

我相信它在生成的 Response 对象的 deserializeElementsFromNode 中出现问题,但尚未查明。这不是“为我调试我的程序”问题。我的问题很简单——有没有人遇到过由 wsdl2objc 生成的 base64Binary 字节数组返回类型的问题?

更新


我认为问题出在

+ (id)dateWithBase64EncodedString;

在 NSData (MBBase64) -

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

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

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

我假设这不会使 Objective-c 运行时要求内存..所以当我释放 NSData 时,它仍然以某种方式分配有“malloc”。有谁比我更了解?

【问题讨论】:

    标签: iphone ios web-services wsdl base64


    【解决方案1】:

    在 + (id)dateWithBase64EncodedString 我把最后一行改成:

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

    而且它似乎有效。这只是我的 hack,但如果你是 wsdl2objc 的作者,希望它会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      相关资源
      最近更新 更多