Возможно, вы (недостаточно контекста) неправильно распределяете строки.
string List[10];
выделяет только массив из 10 string
, то есть 10 char *
, то есть 10 символьных указателей. Он не выделяет памяти для самих строк.
Так что если ваш membername
выше, например, глобальный char *
, в который вы копируете данные из сети, все ваши слоты в List
в конечном итоге будут указывать на то же самое место памяти .
Чтобы это работало, вам нужно выделить (и тщательно освободить) все слоты в List
. Что-то вроде:
List[index] = strdup(membername);
Для повышения вероятности раннего обнаружения ошибок сначала установите List
на все нулевые указатели.
for (int i=0; i<10; i++) List[i] = NULL;
и когда пользователь «уходит», освободите и сбросьте этот слот в NULL:
free(List[index]);
List[index] = NULL;
Таким образом, вы получите отличные, неприятные ошибки, если не будете достаточно тщательно управлять своими слотами: -)