gpt4 book ai didi

iphone - XCode 中分配的值是垃圾或未定义的逻辑错误

转载 作者:行者123 更新时间:2023-12-03 20:35:48 25 4
gpt4 key购买 nike

我正在将 iPhone 应用程序更新到 iOs4,但在代码中遇到了“函数调用中的传递参数未定义”问题

for (i = 0; i < self.numberOfSegments; i++) {
[self setWidth:round(width[i]) forSegmentAtIndex:i];
}

这很公平,width[i] 尚未初始化。然而,更新代码(如下)给了我这个新错误,“分配的值是垃圾或未定义”。阅读本文后,我认为 segWidth 保留其垃圾值 - 这是正确的吗?如果是,我该如何清除它?

for (i = 0; i < self.numberOfSegments; i++) {
float segWidth = (float)width[i];
[self setWidth:round(segWidth) forSegmentAtIndex:i];
}

------------- 编辑 ------------------

谢谢各位的回复。更多信息如下;

该方法的通用版本如下所示为 someFunction。我已经删除了丑陋的转换,但仍然看到行 segWidth = width[i];

的“分配的值是垃圾或未定义”逻辑错误

我同意值 width[i] 似乎没有明确的初始化,我不确定是否是我对基本 Obj-c float 类型缺乏了解,或者我的赋值语法是否存在逻辑缺陷?

- (void)someFunction
{
unsigned int n = self.numberOfSegments;
float width[n];

for (i = 0; i < n; i++) {
width[i] = someFloatValue;
}

...

for (i = 0; i < self.numberOfSegments; i++) {
float segWidth = 0.0;
segWidth = width[i];

[self setWidth:round(segWidth) forSegmentAtIndex:i];
}

}

setWidth的定义是:

- (void)setWidth:(CGFloat)width forSegmentAtIndex:(NSUInteger)segment;         // set to 0.0 width to autosize. default is 0.0

最佳答案

我假设您正在调用:

- (void)setWidth:(CGFloat)width forSegmentAtIndex:(NSUInteger)segment

并且函数调用中的传递参数未定义实际上是您执行构建和分析时的 LLVM 静态分析器错误。 (这两个相当重要的数据点 - 准确地传递您正在做的事情和输出的内容非常有帮助)。

而且你说width[i]尚未初始化。

您添加 float segWidth = (float)width[i] 的修复非常应该会导致分析器提示**分配的值是垃圾或未定义**。您实际上尚未将 width[i] 设置为任何内容。不过,我建议针对静态分析器提交一个错误,因为第一个错误消息确实非常迟钝。

正如约书亚所说,这个 Actor 阵容也很奇怪。一般来说,在 Objective-C 中,您很少需要使用类型转换,并且几乎永远不会在标量类型上使用它。

<小时/>

考虑两个循环计数:

for (i = 0; i < n; i++) {
...
}


for (i = 0; i < self.numberOfSegments; i++) {
...
}

静态分析器不知道n == self.numberOfSegments,因此必须假设第二个循环可能比第一个循环更长。现在,您可能会说,“但是我在上面分配了 n = self.numberOfSegments?!”

您确实这么做了,但该值可能在第一次调用和第二次调用之间发生了变化,因此分析器已正确识别出您可能正在使用未初始化的值。

(实际上,应该说你可能会跑出数组的末尾,因为那才是真正的风险)。

关于iphone - XCode 中分配的值是垃圾或未定义的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com