我创建了一个名为IntArray
的Objective-C类,它包含一个int
的C数组以及访问它并操纵它的方法。
在大多数情况下,它似乎运作良好,但我遇到了一个奇怪的问题。我在一个类中创建了两个IntArray
实例,现在我尝试在另一个类中访问它们。
第一个IntArray
似乎工作正常,但第二个,当我记录值时,散布在数组周围的奇怪值,例如-536870912
和62026224
。
这些值没有被代码添加,所以我只能假设它是关于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;
}