Рассмотрим:
struct
{
char *rcssMonitoredServices;
int nSomeVar;
} appinfo;
При обычном использовании:
appinfo.rcssMonitoredServices=strdup("something");
Однако теперь рассмотрим:
char *RefToStructVar[]=
{
appinfo.rcssMonitoredServices,
"\0"
};
Намерение состоит в том, что мы можем выполнять операции с appinfo.rcssMonitoredServices, используя указатель RegToStructVar [0].
Есть веские причины, по которым у меня есть переменные, указанные в массивах. В случае целочисленных переменных, мы в порядке. Указатели на * char совершенно разные.
Если я делаю ту же технику против appinfo.nSomeVar
int *varpointers[] =
{
&appinfo.nSomeVar,
0
};
varpointers[0]=196;
printf("%i",appinfo.nSomeVar) // -> "196"
Я думал, что, учитывая, что RefToStructVar [0] содержит указатель на appinfo.rcssMonitoredServices, делая вещи вроде
RefToStructVar[0]=strdup("something");
Будет идентично:
appinfo.rcssMonitoredServices=strdup("something");
Но нет.
Это
RefToStructVar[0]=strdup("something");
ошибку сегментации.
Возможно, основной ... но сейчас я запутался.
-
позже
Вот что такое segfaults:
struct
{
char *cVar;
int n;
} mystruct;
char *aVars[]=
{
mystruct.cVar,
"\0"
};
aVars[0]=strdup("something");
Это работает:
struct
{
char *cVar;
int n;
} mystruct;
char **aVars[]=
{
&mystruct.cVar,
"\0"
};
*aVars[0]=strdup("something");