Objective-C

时间:2016-07-19 19:54:56

标签: objective-c malloc primitive

我创建了一个名为IntArray的Objective-C类,它包含一个int的C数组以及访问它并操纵它的方法。

在大多数情况下,它似乎运作良好,但我遇到了一个奇怪的问题。我在一个类中创建了两个IntArray实例,现在我尝试在另一个类中访问它们。

第一个IntArray似乎工作正常,但第二个,当我记录值时,散布在数组周围的奇怪值,例如-53687091262026224

这些值没有被代码添加,所以我只能假设它是关于C数组的内存地址的问题,但我无法解决原因。

@implementation QPIntArray
{
    int   *_array;

    int _columns;
    int _rows;
    int _layers;

    int _count;


    float _tileWidth;
    float _tileHeight;
    float _tileDepth;

}

    - (instancetype)initArrayWithColumns:(int)c rows:(int)r tileWidth:(float)tw tileHeight:(float)th
    {
        if (self = [super init])
        {
            [self setArrayColumns:c rows:r layers:1];
            _tileWidth = tw;
            _tileHeight = th;
        }

        return self;
    }


    - (void) setArrayColumns:(int)c rows:(int)r layers:(int)l
    {
        _columns = c;
        _rows = r;
        _layers = l;

        _count = ((c * r) * l);

        free(_array);
        _array  = (int *)malloc(sizeof(int) * ((c * r) * l));
    }

我只是创建了这个类的两个实例。一个名为LevelData的类,然后将此类传递给另一个名为TileMap的类,并从IntArray类中的LevelData检索TileMap,第一个IntArray似乎工作正常,但第二个有这些奇怪的值,因此代码无法按预期工作。

//In LevelData

 _tilemap1 = [[QPIntArray alloc] initArrayWithColumns:_columns rows:_rows tileWidth:_tileWidth tileHeight:_tileHeight];

_tilemap2 = [[QPIntArray alloc] initArrayWithColumns:columns rows:rows tileWidth:cellWidth tileHeight:cellHeight];

//In TileMap
- (instancetype)initWithLevelData:(QPLevelData*)levelData
{
      if (self = [super initWithLoopDirection:QPMapLoopNone map:levelData.tilemap2])
     {}

     return self;
}

0 个答案:

没有答案