我的代码是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文件很好......但无论如何它似乎都很好。
答案 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不需要初始化(但如果不这样做,则会有垃圾数据)。