Привет
Я медленно осваиваю указатели и косвенность, но у меня все еще есть небольшие проблемы.
В моей функции main
я создаю массив структур (компьютеров), используя malloc
int arraySize = 0;//This may be the first issue
Computer *ptrComputer = NULL;
ptrComputer = (Computer*) malloc(sizeof(Computer) * arraySize);
Затем я передаю указатель на функцию, которая считывает данные из файла в массив
arraySize = readFileToArray(&ptrComputer, arraySize);
int readFileToArray(Computer **compArray, int arraySize){
Computer newComp;
int foundARecord = 0;
/*File stuff*/
arraySize = extendArrays(compArray, arraySize, no_elements);
/*Use fscanf to read file data into the newComputer variable*/
printf("g %i\n", arraySize);
*compArray[arraySize - 1] = newComp;//set the newly created part of the array to newComputer
return arraySize;
}
int extendArrays(Computer **compArray, int arraySize){
arraySize++;
//Resize the computer array
*compArray = (Computer*)realloc(*compArray, (sizeof(Computer)*(arraySize + 1)));
return arraySize;
}
Теперь, насколько я понимаю, я передаю адрес ptrComputer в функцию readFileToArray()
. Затем он передает этот же адрес функции extendArrays()
, которая изменяет его размер. Затем я пытаюсь присвоить newComp место в памяти, на которое указывает compArray. Это работает до тех пор, пока я пытаюсь записать в индекс 0, но любые другие заставляют xcode генерировать ошибку exc_bad_access. Все это очень сбивает с толку, может кто-нибудь с небольшим опытом в этом увидеть, где я иду не так? Он работал раньше, когда я передавал фактический указатель на функцию readFile
, но он работал только один раз (думаю, что я перераспределяю копию указателя)
Любая помощь будет очень цениться
Спасибо