Нужна помощь в понимании ошибок с помощью struct в C

Я пытаюсь разными способами работать со значениями структуры, но все они дают мне ошибку. Итак, у меня есть следующая глобальная структура:

struct Car_ {
 char *currentCar;
 char **cars;
}carPars;

то я прав, чтобы назначить * currentCar member, чтобы указать на первый массив ** автомобилей. Я делаю это следующим образом:

tokenizer->currentToken = tokenizer.tokens[0];

Это указывает, что ссылочный тип Member 'struct TokenizerT_' не является указателем; возможно, вы хотели использовать "."?

Тогда я стараюсь таким образом

carPars.currentCar = carPars.cars[0];

но когда я запускаю свою программу, это фактически дает мне EXC_BAD_ACCESS (обычно это означает ошибку сегментации).

Затем я пытаюсь:

(*curPars).currentCar = (*car).currentCar[0];

но тогда у меня есть - Indirection требуется операнд указателя

Как я буду делать это правильно?

3 ответа

Во-первых, вам нужно назначить память автомобилям, количество требуемых массивов. Скажем, 10:

cars = (char**)malloc (10*sizeof(char));

Затем вам нужно назначить память для каждого массива 10. Допустим, что в каждом массиве вам нужно 10 элементов:

> for (index = 0; index< 10; index++)
> cars[index] = (char*) malloc(10*sizeof(char));

Затем, чтобы назначить CurrentCar, вы можете:

carPars.currentCar = carPars.cars[i];


вы не инициализировали свой второй член переменной carPars типа struct Car_. Так как в двойных указателях ** нет никаких значений. Вы можете попробовать следующее:

carPars.cars = NULL;
 carPars.currentCar = carPars.cars[0];

если все же он не работает, вы можете попробовать следующее:

carPars.cars = (char *)malloc(10*sizeof(char*));
for(i=0; i<5; i++)
 carPars.currentCar = (char)malloc(10*sizeof(char));

здесь я предполагаю, что вы хотите хранить 10 автомобилей, и каждое название автомобиля состоит из 10 символов. вы можете изменить это значение в соответствии с вашими потребностями.


Сначала вам нужно назначить что-то для cars. Предположительно, вы хотите, чтобы это был массив, например 50 элементов:

carPars.cars = calloc(50, sizeof (char*));

licensed under cc by-sa 3.0 with attribution.