私は構造体を持っています
struct request {
int code;
char *message;
};
ちゃんと解放したい。
私はそれを行うために次の機能を持っています:
void free_request(struct request *req) {
if (req->message != NULL) {
free(req->message);
}
free(req);
req = NULL;
}
問題は、文字列リテラルを使用して作成された要求を解放しようとすると、コンパイラから "free(): 無効なポインター"/segfault エラーが発生することです。
struct request *req;
req = malloc(sizeof(struct request));
req->message = "TEST";
free_request(req);
別の場所でリクエスト構造体を作成したいので、リテラルを使用して(クライアント側で)、ソケットから読み取った *chars を使用して(サーバー側で)、 malloc を使用して作成したメッセージを解放できる一方で、リテラルを解放しようとしないでください。