#c #arrays #pointers
#c #массивы #указатели
Вопрос:
В настоящее время у меня есть структура, которая содержит указатель на массив указателей. Я пытаюсь присвоить значение элементу в массиве указателей, но я получаю ошибку сегментации.
aStruct->anArray[0]->string = test;
aStruct содержит char** anArray и char *string .
char *test = «тест».
Когда я пытаюсь сделать то, что я сделал, я получаю ошибку сегментации. Эта команда недопустима?
struct aStruct
{
char **anArray;
};
Я использовал calloc для создания массива размером 10.
Ответ №1:
aStruct->anArray[0]->string = test;
aStruct содержит char** anArray и char *string . char *test =
«тест».Эта команда недопустима?
Конечно, нет. aStruct->anArray[0]
было бы char*
и не имело бы члена ->string
.
Кроме этого, если он действительно компилируется, и вы только разместили неправильный код, вы не получите ошибку сегментации, если anArray
она была правильно распределена и имела правильный размер. Итак, вам нужно что-то подобное в вашей программе:
aStruct->anArray = malloc(size * sizeof(*aStruct->anArray));
где размер равен хотя бы одному для вашего случая, но обычно это количество элементов, к которым вам когда-либо понадобится доступ.