Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 数组中的值会自行更改_Objective C_Arrays - Fatal编程技术网

Objective c 数组中的值会自行更改

Objective c 数组中的值会自行更改,objective-c,arrays,Objective C,Arrays,这可能是一个彻头彻尾的问题,但我自己似乎无法解决这个问题。我搜索了这里和谷歌,但没有任何运气 我有一个有名字的类,比如“logme”。我在.h文件中实现了一个float*floaters,并在.m文件中合成了一个属性。.m文件中有两个方法method1和method2。当我从viewcontroller执行method1时,它使浮动变量成为一个带有一些值的数组。我记录它们,以检查它们是否正确。之后,我执行method2,它只记录相同的数组,但现在数组中的值完全不同 logme.h @interf

这可能是一个彻头彻尾的问题,但我自己似乎无法解决这个问题。我搜索了这里和谷歌,但没有任何运气

我有一个有名字的类,比如“logme”。我在.h文件中实现了一个float*floaters,并在.m文件中合成了一个属性。.m文件中有两个方法method1和method2。当我从viewcontroller执行method1时,它使浮动变量成为一个带有一些值的数组。我记录它们,以检查它们是否正确。之后,我执行method2,它只记录相同的数组,但现在数组中的值完全不同

logme.h

@interface Logme : NSObject {
    float *floaters;
}
-(void)method1;
-(void)method2;
洛格姆

@implementation Logme
-(void)method1 {
    floaters = (float[8]) {
        1.0f, 2.0f,
        3.0f, 4.0f,
        6.0f, 5.0f,
        7.0f, 8.0f,
    };
    for (int i = 0; i < 8; i++) {
        NSLog(@"%f", floaters[i]);
    }
}
-(void)method2 {
    for (int i = 0; i < 8; i++) {
        NSLog(@"%f", floaters[i]);
    }
}
@end
结果:

NSLog from method1:
1.000000
2.000000
3.000000
4.000000
6.000000
5.000000
7.000000
8.000000

NSLog from method2:
0.000000
-1.998885
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
  • 对不起。我在和这个4格系统作战。它不允许我添加.m文件代码。终于在这里找到了:)

    • 直接的答案是@HotLicks在评论中给出的。我想我应该多解释一下

      当您在方法中有类似的内容时:

      - (void)someMethod {
          float *numbers = (float[8]) {
              1.0f, 2.0f,
              3.0f, 4.0f,
              6.0f, 5.0f,
              7.0f, 8.0f,
          };
      }  // <-- end of scope for these values
      
      -(void)someMethod{
      浮点*数字=(浮点[8]){
      1.0f,2.0f,
      3.0f,4.0f,
      6.0华氏度,5.0华氏度,
      7.0华氏度,8.0华氏度,
      };
      
      }//您正在为堆栈中的内存块分配一个指针,这意味着当您退出mrthod1时,内存将被释放。method1之后打印的值是偶然的,也可能发生内存未被触及的情况,但堆栈通常在每次方法调用时都会发生变化,这就是您的情况

      选择1

      您使用的是浮点数作为数组,因此将其声明为数组,它将拥有自己的存储:

      @interface Logme : NSObject {
      float floaters[8];
      }
      
      -(void)method1 {
          for(int i=0; i<8;i++)
              floaters[i]=i+1;
      for (int i = 0; i < 8; i++) {
          NSLog(@"%f", floaters[i]);
      }
      
      @接口日志:NSObject{
      浮球[8];
      }
      -(无效)方法1{
      
      对于(int i=0;i)如果没有复制问题的(最小)代码,您的问题将无法回答。您可以添加method1和method2实现吗?它是如何变化的?您是否为Logme创建了不同的对象?您如何调用method1和method2?您可以发布吗?
      floaters=(float[8])…
      并没有创建一个持久数组--它会“噗”一声当方法返回时。为什么不使用NSArray或NSMutableArray?它们比C更强大、更简单array@userXXXX你需要阅读和学习很多。我非常感谢你用例子来解释。我理解我做错了什么,以及如何正确地做。
      @interface Logme : NSObject {
      float floaters[8];
      }
      
      -(void)method1 {
          for(int i=0; i<8;i++)
              floaters[i]=i+1;
      for (int i = 0; i < 8; i++) {
          NSLog(@"%f", floaters[i]);
      }
      
      -(void)method1 {
      floaters=(float*)malloc(8*sizeof(float));
      for(int i=0; i<8; i++)
          floaters[i]=i+1;
      for (int i = 0; i < 8; i++) {
          NSLog(@"%f", floaters[i]);
      }