Я создаю много 2D-массивов int и float C и собираюсь назначить их указатели на NSPointerArray. Все хорошо, когда я создаю и заполняю их данными, но когда я добавляю addPointer в массив, я получаю EXEC_BAD_ACCESS. Q1-Почему это неправильно? Q2-Каков наилучший подход, обеспечивающий доступ ко многим 2D-массивам, созданным с помощью calloc?2D-массивы в NSPointerArray
- (NSPointerArray *)treeData{
if (_treeData == nil) {
_treeData = [[NSPointerArray alloc] init];
int** VVD = createIntArray(3000,200);
[_treeData addPointer:VVD];
}
return _treeData; // addеd later to the post, exists in live code
}
Для справки
int** createIntArray(int n, int m)
{
int i=0;
int* values = calloc(m*n, sizeof(int));
int** rows = malloc(n*sizeof(int*));
for (i=0; i<n; ++i)
{
rows[i] = values + i*m;
}
return rows;
}
обычно это стандартная практика, что функция абонента отвечает за выделения и освобождения памяти, не функции, которую он вызывает. –
@ Арам Кочарян - это абсолютно неверное предположение. ИМО. ленивые получатели распределяют данные все время, пока вызывающий не должен это знать! и это прекрасно, в этом случае ** название говорит ему **, что он должен позже освободить массив! в dealloc или так –
все массивы должны оставаться и быть доступными до выхода программы. массив tree_data со всеми двумерными массивами в нем должен быть доступен для других методов все время. –