我有一个结构体
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 创建的消息。