【问题标题】:What does Fl_Region R = (Fl_Region)malloc(sizeof(*R)) mean?Fl_Region R = (Fl_Region)malloc(sizeof(*R)) 是什么意思?
【发布时间】: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


【解决方案1】:

来自 FLTK 文档:

Fl_Region 是操作系统特定的类型。

根据我在您的代码中的解释:

Fl_Region 是一个指向结构的指针。
R 在以下行中声明:

Fl_Region R = (Fl_Region)malloc(sizeof(*R));

这就是为什么您无法在其他任何地方找到它。 因此,该行正在尝试为指针 R(即 *R)指向的结构(Fl_Region 类型)分配足够的内存 然后将 malloc 返回的泛型指针转换为 Fl_Region 类型。这就是 malloc 左侧的 (Fl_Region) 所做的。 建议听从bbum的建议,把sizeof(*R)改成sizeof(Fl_Region)

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2013-09-24
    • 2022-12-08
    • 2013-11-03
    • 1970-01-01
    • 2014-02-01
    • 2014-05-16
    • 2011-02-10
    相关资源
    最近更新 更多