gpt4 book ai didi

objective-c - 圆弧和 Malloc : EXEC_BAD_ACCESS

转载 作者:太空狗 更新时间:2023-10-30 03:46:38 25 4
gpt4 key购买 nike

我从事一个项目已经有一段时间了,我决定跳转到 ARC。我遇到了一些每次都被炸毁的代码,我想知道为什么。我设法将它简化为这个片段:

typedef __strong id MYID;

int main(int argc, char *argv[])
{
MYID *arr = (MYID *) malloc(sizeof(MYID) * 4);

arr[0] = @"A"; // always get an EXEC_BAD ACCESS HERE
arr[1] = @"Test";
arr[2] = @"Array";
arr[3] = @"For";

// uh oh, we need more memory
MYID *tmpArray = (MYID *) realloc(arr, sizeof(MYID) * 8);
assert(tmpArray != NULL);

arr = tmpArray;

arr[4] = @"StackOverflow"; // in my actual project, the EXEC_BAD_ACCESS occurs here
arr[5] = @"Is";
arr[6] = @"This";
arr[7] = @"Working?";

for (int i = 0; i < 8; i++) {
NSLog(@"%@", arr[i]);
}

return 0;
}

我不太确定这里发生了什么,在 4 个不同的项目中都厌倦了这个,但他们都失败了。我的 malloc 调用有问题吗?有时它返回 null,有时它返回一个我无法访问的指针。

最佳答案

崩溃是因为您将 malloc 内存转换为 C 对象数组。当您尝试分配给其中一个插槽时,ARC 将释放先前的值,这将是垃圾内存。尝试使用 calloc() 而不是 malloc() 来获取归零内存,它应该可以工作。

请注意,您的 realloc() 调用也不会对分配的任何新内存进行零填充,因此如果您需要 realloc(),那么您可能需要使用临时 void* 指针,然后在分配给对象数组之前手动将其填零。

关于objective-c - 圆弧和 Malloc : EXEC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com