我有一些了解一些基础知识的问题。我想创建指针数组(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");
}
}
答案 0 :(得分:0)
您没有分配适量的内存。
对于bufferSize
个int
个,您需要分配
a1 = malloc(bufferSize * sizeof(int));
后来因此
NSData *c1 = [NSData dataWithBytes:a1 length:(bufferSize * sizeof(int))];
等。在你的情况下,
for (int i=0; i<bufferSize; i++) {
a1[i] = i;
}
写入超出分配的内存,这可能导致各种未定义的内存 行为。