objective-c - Objective-C header 中的 C 指针损坏

标签 objective-c c arrays pointers header

我的 header 中有一个 CGFloat 指针,用于指向 CGFloat 数组。我这样声明:CGFloat* pointer; 。在初始化中,我尝试使用以下代码设置指针:

CGFloat newArray[2] = {
            0.0f, 1.0f,
        };

        pointer = newArray;

这个“实际上”有效。我没有收到任何编译器错误之类的东西。当我使用以下代码设置指针后立即打印数组的第二个值时:printf("%f", pointer[1]); 我得到了正确的结果(1.000000)。但是,当我在名为 next 的方法中打印数组的第二个值时,我得到 0.000000,这意味着指针不再指向数组。

我有两个问题。如何解决这个问题?为什么指针在设置后可以正常工作,但又“忘记”了它的值?

最佳答案

CGFloat newArray[2] = {
        0.0f, 1.0f,
    };

数组索引从 0 开始。pointer[1] 打印数组中的第二元素,而不是第一个。 指针[2]超出了数组的末尾。

CGFloat newArray[2] = {0,0};
newArray[0]; // this is the 1st item
newArray[1]; // this is the 2nd item
newArray[2]; // this is nonsense.

请注意,如果您尝试将 newArray 传递到某个地方并打算稍后使用它,那将是很糟糕的。 newArray 位于堆栈上,当范围被销毁时也会被销毁。

如果您想要一个返回两个 float 组的函数,您可以这样做:

 CGFloat *two_of_these() {
     CGFloat *newArray = malloc(2 * sizeof(CGFLoat));
     newArray[0] = 42.0;
     newArray[1] = 59.4;
     return newArray;
 }

只需确保稍后对该返回值调用free即可。请注意,分配如此小的东西是极其罕见的。通常,它将是直接返回的结构。请参阅 CGPointCGRectNSRange 等...

关于objective-c - Objective-C header 中的 C 指针损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177593/

相关文章:

iphone - 将 ViewController 放在 TabBarController 之上

iphone - 在 Objective-C 中动态加载类?

c - GCC 中的订购保证

javascript - Vue拼接(将数组项移动到数组中的另一个位置)不更新DOM

javascript - 简化一个工作函数来替换特定的单词?

javascript - 将两个 forEach 转换成 map

ios - 更改 Apple Watch 标签内的文本对齐方式

ios - 条件为 "one time"

使用 memcpy 的 dest 对象中的缓冲区溢出的编译器警告/错误

c - 数组:越界计算