将指针数组复制到NSData,然后复制到指针数组

时间:2014-01-12 15:39:16

标签: iphone objective-c

我有一些了解一些基础知识的问题。我想创建指针数组(a1)将其复制到NSData(c1),然后再从NSData创建指针数组(b1)并检查a1和b1的内容是否相同。

但我面对两个错误:

当我想创建NSData dataWithBytes时,

第一次是“释放对象的校验和不正确”:length:

a1和b1中的第二个字节不相同。 有人能告诉我为什么吗?为了记录,我使用带弧的xcode5。

- (void) testCopyBuffer {
    int const bufferSize =4096;
    int* a1;
    a1 = (int*)malloc(bufferSize);

    for (int i=0; i<bufferSize; i++) {
        a1[i] = i;
    }

    NSData *c1 = [NSData dataWithBytes:a1 length:bufferSize];

    int* b1;
    b1 = malloc(bufferSize);
    [c1 getBytes:b1 length:bufferSize];

    for (int i=0; i<bufferSize; i++) {
        XCTAssertTrue(a1[i]==b1[i], "Powinny być takie same");
    }
}

1 个答案:

答案 0 :(得分:0)

您没有分配适量的内存。 对于bufferSizeint个,您需要分配

a1 = malloc(bufferSize * sizeof(int));

后来因此

NSData *c1 = [NSData dataWithBytes:a1 length:(bufferSize * sizeof(int))];

等。在你的情况下,

for (int i=0; i<bufferSize; i++) {
        a1[i] = i;
    }

写入超出分配的内存,这可能导致各种未定义的内存 行为。