【发布时间】:2016-09-17 02:17:10
【问题描述】:
有人可以帮我破译 fltk1.3.0 中的这行代码吗?
extern CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h);
inline Fl_Region XRectangleRegion(int x, int y, int w, int h) {
Fl_Region R = (Fl_Region)malloc(sizeof(*R));
R->count = 1;
R->rects = (CGRect *)malloc(sizeof(CGRect));
*(R->rects) = fl_cgrectmake_cocoa(x, y, w, h);
return R;
}
我有一个使用 fltk 作为依赖项的程序的问题,它失败并出现错误
000/??? sec ~~(,_,"> [oo]ctffind(1976,0x7fff7a904310) malloc: * mach_vm_map(size=18446744071761305600) 失败(错误代码=3) * 错误:无法分配区域 *** 在 malloc_error_break 中设置断点进行调试
程序作者建议这可能是 Mac OSX 特定的问题,当我运行 Xcode 的仪器来查找内存分配和泄漏时,列出的主要内容是 libfltk.1.3.dylib 和 CoreGraphics 用于内存分配,和 NSAutoReleasepool 内存泄漏。我已经尝试查找这些术语的基本 Objective C 含义,但我仍然对一些事情感到困惑,比如 malloc 前面的 () 是什么意思,指针 R 指向什么(我在其他任何地方都找不到 R 定义) mac.H),它是否可以指向 mac.H 文件之外的某个地方的 R。看起来这些代码行是否可以在程序运行期间将内存分配控制在合理的轨道上?
【问题讨论】:
-
坏代码就是坏代码。该 sizeof 应该是
sizeof(Fl_Region)并且不取消引用指针的垃圾值。我敢打赌,C 语言规范没有定义这样的表达式,因此,它在 OS X 上的错误只是 OS X 编译器选择与其他平台不同的随机行为的后果。
标签: objective-c macos malloc fltk