リストを作成し、それを印刷してリストから削除するプログラムを作成しています(3つの関数)。リストから値を削除する
プリントとプッシュバックはうまくいきますが、うまく機能しますが、removeFromList()関数のリストから削除する数値を選択する方法を理解できません。
名前(クライアント、ソケットなど)に注意を払わないでください。クライアント/サーバアプリケーションがアクティブソケットを保存するためです(クライアントが切断されたときにリストから削除する必要があります)。
ここで私は2つの構造を有する:listElementとclientList(listElementの要素を先頭へのポインタが含まれています)
struct listElement
{
SOCKET socket;
struct listElement* next;
};
struct clientList
{
listElement * head;
};
マイプッシュバック機能:
int pushBackСlient(struct clientList* list, int socket)
{
struct listElement* newClient = (struct listElement*)malloc(sizeof(struct listElement));
struct listElement* currentElement = list->head;
newClient->socket = socket;
newClient->next = 0;
do
{
// IT'S PUSHBACK
if (list->head == 0)
{
list->head = newClient;
break;
}
while (currentElement->next != 0)
{
currentElement = currentElement->next;
}
currentElement->next = newClient;
} while (false);
return 0;
}
マイプリント:
void print(struct clientList* list)
{
struct listElement* currentElement = list->head;
while (currentElement != 0)
{
printf("%d\n", currentElement->socket);
currentElement = currentElement->next;
}
}
を
機能に問題があります(「ソケット」が追加されたかどうかを確認するためにデバッグメッセージを作成しました)正しく)。最初の3行は必要ないとは思いますが、わかりません。
更新 13/05/2017
void removeFromList(struct clientList* list, int socket)
{
struct listElement* currentElement = list->head;
do
{
if (list->head == 0)
{
return;
}
while (currentElement != 0 && currentElement->next != 0)
{
if (currentElement->socket == socket)
{
printf("currentElement == %d\n", currentElement);
currentElement = currentElement->next;
printf("currentElement == %d\n", currentElement);
free(currentElement);
//break; // if I only want to remove the first socket?
}
currentElement = currentElement->next;
}
} while (false);
}
ありがとうございました。あなたのremove関数の場合
あなたの最初の最も重要なエラーは、これがCだと思っていることです! – Olaf
これはクラス(学習)練習ですか?単に 'std :: list'を使用しない場合。 –
@Olafなぜあなたはそれを伝えているのか分かりませんでした。またstdio.h、stdlib.h、winsock2.hライブラリを使用しています –