使用指针导致内存错误的简单函数

时间:2014-03-27 00:53:58

标签: ios objective-c c pointers

我的代码是Objective-C和C的混合。我已经简化了下面的代码,但它仍然会产生相同的错误。在Objective-C文件中:

CGFloat r,g,b = 0.5;
CGFloat x,y,z = 0.0;

foo(r, g, b , &x, &y, &z);

和C部分(导入的C文件):

void foo(CGFloat R, CGFloat G, CGFloat B, CGFloat *X, CGFloat *Y, CGFloat *Z) {

    *X = 5;
    *Y = 5;
    *Z = 5;

}


分配到其中一个指针中的内容时会发生错误 - 它表示EXS_BAD_ACCESS。我错过了什么(或者没有正确理解?)。我假设在同一个项目中有单独的.c和.m文件很好......但无论如何它似乎都很好。

2 个答案:

答案 0 :(得分:0)

在我的c源文件的标题中,有一些流氓行将CGFloat声明为double。删除了,并用浮动替换了我的C文件中的所有CGFloat。

答案 1 :(得分:-1)

您必须为所有变量初始化内存。试试这个:

CGFloat r = 0.5, g = 0.5, b = 0.5;
CGFloat x = 0, y = 0, z = 0;

foo(r, g, b , &x, &y, &z);

在Objective-c中,如果您尝试访问变量的内存位置,即&x,而不先为其指定值,它将为您提供EXS_BAD_ACCESS。但是,r,g和b不需要初始化(但如果不这样做,则会有垃圾数据)。