Xcode 4内部编译器错误:总线错误

时间:2011-03-30 23:22:49

标签: compiler-errors xcode4

Xcode 4.0.1已经开始给我一个内部编译器错误。它只是说“总线错误”。它出现在我的一个.m文件的底部,现在差不多有4000行。

我看过this question,但我没有犯这个错误,当它出现时,我通常可以通过在某处添加一些随机代码来修复它。当它第一次出现时,我将它追踪到我在一堆新代码中设置视图框架的位置:

view.frame = CGRectMake(otherView.frame.origin.x, 0, otherView2.frame.size.width, 40);

如果我用硬编码值替换了otherView和otherView2引用,则问题就消失了。或者如果我只是将int x = 0;放在违规行之上,它就会消失。

我也看了this question,但它没有明确的答案。它似乎不是任何单独的代码行;它只是随机出现。谷歌没有任何我能找到的明确解决方案。

我已经尝试过该项目的所有可能的编译器(GCC 4.2,LLVM GCC 4.2和LLVM编译器2.0,它们都有问题。我将静态分析器设置为运行每个构建,并将其关闭没有帮助。This question似乎表明它是编译器中的一个错误。我只是卡住了吗?有解决方法吗?

编辑:另一个例子:它再次发生,我追踪到:

[headerView centerViewVertically:milesLabel pixelsFromRight:pointLabel.frame.size.width + 20];

我把它改为:

int x = pointLabel.frame.size.width;
[headerView centerViewVertically:milesLabel pixelsFromRight:x + 20];

它再次起作用。

8 个答案:

答案 0 :(得分:1)

我遇到了这个错误,结果发现错误是我的,基本上是由类型-o引起的,或者更准确地说是一个粘贴-o。

我创建了两个标签并将它们添加到子视图中。代码基本上是这样的。

UILabel *pointsLabel = [[UILabel alloc] initWithFrame:ptsFrame];
...
[self addSubview:pointsLabel];
[pointsLabel release];

UILabel *typeLabel = [[UILabel alloc] initWithFrame:typeFrame];
...
[self addSubview:pointsLabel];
[typeLabel release];

请注意,在第二个addSubview中我添加了pointsLabel,即使我已经发布了它(并且真的是要添加typeLabel)。我希望这也会导致运行时错误,但无论出于何种原因,它都会导致上面描述的总线错误。需要寻找的东西。

答案 1 :(得分:1)

我刚刚发生这种情况(不是第一次)。我仍然没有弄清楚究竟是什么导致了问题,但它将为模拟器编译,但不是为设备编译。将我的[[array alloc] init]从我的init方法中移出并进入一个单独的设置方法来修复问题。

也许我会在太短的时间内分配太多内存?这似乎不太可能,因为有几个[[array alloc] init]数组设置在我尝试添加之前和之后完成。所有内容都完全相同于其他数组的完成情况,为什么它是一个问题这次我还不明白。

答案 2 :(得分:1)

在xcode执行了我的代码的现代化之后,我也遇到了这个错误。我在项目和目标构建设置中将编译器切换到Apple LLVM 2.1并再次运行。这引起了一些流浪;在项目中,错误总线错误消失了。

答案 3 :(得分:0)

你是否解除了像otherView这样的任何对象,我很确定在xcode中会产生一个总线错误。

答案 4 :(得分:0)

对我来说,真的看起来像编译错误。

我遇到了同样的问题(Xcode 4.0.2; LLVM GCC 4.2)。在视图控制器的viewDidLoad中,我有一行:

self.title = @"Enter your details";

我不再需要这一行,所以我将其删除,后续版本因“内部编译错误:总线错误”而失败。如果不是删除行,而是将其更改为:

self.title = nil;

构建编译正常。

详细的构建日志包含:

MyViewController.m:316: internal compiler error: Bus error
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
{standard input}:0:End-of-File not at end of a line
{standard input}:1704:End-of-File not at end of a line
{standard input}:unknown:Partial line at end of file ignored
{standard input}:1695:non-relocatable subtraction expression, "L_OBJC_CLASSLIST_REFERENCES_$_6" minus "LPC11_18"
{standard input}:1695:symbol: "L_OBJC_CLASSLIST_REFERENCES_$_6" can't be undefined in a subtraction expression
{standard input}:1692:non-relocatable subtraction expression, "L_OBJC_SELECTOR_REFERENCES_36" minus "LPC11_17"
{standard input}:1692:symbol: "L_OBJC_SELECTOR_REFERENCES_36" can't be undefined in a subtraction expression
[... any many more lines like this ...]

答案 5 :(得分:0)

我通过下一行代码得到了同样的错误:

tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;

加倍同一行代码并没有出错:

tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;
tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;

答案 6 :(得分:0)

我在项目中遇到此问题,但仅在编译设备时才遇到。当我为模拟器构建时它工作正常。

我能够通过在项目的构建设置中将编译器从“LLVM GCC 4.2”更改为“LLVM Compiler 2.0”来解决此问题。

我不得不认为这是一个编译错误。不应该是语法上有效但语义错误的代码会导致编译器错误的情况。编译器不执行代码,只是编译它。因此,如果您在那里遇到逻辑或内存管理错误,那么编译器并不关心这些事情。

答案 7 :(得分:0)

您是否使用任何已弃用的功能?

我删除了对已弃用功能的所有调用并且有效!