【发布时间】:2015-10-15 22:00:51
【问题描述】:
与 c/c++ 库集成时 IOS 中的奇怪行为。
在 AppDelegate 中我调用
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^{
[[ABCService sharedInstance] abcInitialize];
});
abcInitialize 在 c++ 库中定义
struct abc *top;
top = calloc(TYPE_SERV,size_of(struct abc));
top->us = server_alloc (...certain_params...);
在服务器 alloc 中,我分配结构 struct1 和 struct2 然后在初始化函数中我尝试访问
top->us = calloc(TYPE_US, size_of(struct us));
if(top->us->struct1) //do something
我注意到我的 struct1 始终为空
当我调试时,我可以看到结构被很好地分配并且值被适当地设置,但是在从函数返回之前,内存被自动释放。 这完全令人困惑和烦人。 谁能帮我理解发生了什么?
我也试过关掉ARC,还是没有变化
【问题讨论】:
-
你需要展示struct1是如何分配的以及它是如何声明的。
-
stuct1 被分配为 calloc (1, stuct1_size);
-
我想你需要展示 abcInitialize: 的样子。因为在您当前的代码中,您没有为
top指针分配内存,而是为us成员(top->us = ...)分配了一些东西。 -
你从未分配过
top。 -
(你需要展示一些实际的代码。)
标签: c++ ios objective-c c memory-management