Разница между "& (epage- >coming [0]) = spage;"и "& (epage- >coming [p2]) = spage;" - PullRequest
0 голосов
/ 13 мая 2011

Последняя строка этого конкретного кодового блока выдает ошибку «lvalue требуется как левый операнд присваивания» Путаница заключается в том, почему последняя строка выдает эту ошибку, а вторая строка - нет.

      int p2 = 0;
      spage = find(in.startpage);
      spage->noutgoing++;
      spage->outgoing = (struct webpage *)realloc((spage->outgoing),((spage->noutgoing)*sizeof(struct webpage)));

      epage = find(in.endpage);
      epage->nincoming++;
      epage->incoming = (struct webpage *)realloc((epage->incoming),((epage->nincoming)*sizeof(struct webpage)));


      position = ((epage->nincoming));

      &(epage->incoming[0]) = spage;
      &(epage->incoming[p2]) = spage;

, где spage, epage - структуры, определенные ниже:

struct webpage {
   char name;               /* name of page */
   struct webpage *outgoing;    //array of pointers pointing to outgoing webpages
   struct webpage *incoming ;   //array of pointers pointing to incoming webpages
   int noutgoing;
   int nincoming;
};

и функция find возвращает указатель на struct webpage.

Проблема была решена путем изменения структур outgoing и incoming на двойные указатели и изменения последней строки на (epage->incoming[p2]) = spage;.

Все еще не знаю, почему произошла ошибка ...

1 Ответ

0 голосов
/ 13 мая 2011

Этот код:

struct S {
    int * p;
};

int main() {
    struct S * s;
    int n;
    &(s->p[42]) = 0;
    &(s->p[n]) = 0;
}

, скомпилированный с GCC 4.5.1, выдает:

n.c:9:16: error: lvalue required as left operand of assignment
n.c:10:15: error: lvalue required as left operand of assignment

Другими словами, в обоих случаях выдается ошибка, необходимая для lvalue.Можете ли вы попробовать этот точный код с вашим компилятором?

...