修复为HttpHeader结构体指针数组malloc内存时的语法错误
问题修复方案
1 编译错误直接修复
你遇到的编译错误根源是sizeof(*HttpHeader)为非法表达式:HttpHeader是类型名,*运算符不能直接作用在类型上。同时根据库的要求,你需要的是一个长度为2的HttpHeader*数组(1个存储有效头指针,1个存储末尾NULL哨兵),所以原来的内存分配代码需修改为:
// 分配2个HttpHeader指针的存储空间 HttpHeader** headers = malloc(sizeof(HttpHeader*) * 2); // 给第一个头元素分配HttpHeader结构体内存 headers[0] = malloc(sizeof(HttpHeader)); // 数组末尾置NULL,满足库的参数要求 headers[1] = NULL;
2 其他潜在崩溃问题修复
你现有代码中字符串分配长度存在不足,strlen返回的是不包含末尾\0的字符串长度,直接按该值分配内存会导致strcpy越界写入,需要把populate_header函数的内存分配逻辑修改为:
void populate_header(HttpHeader** headers, char* value) { // 分配长度+1存储字符串结束符'\0',sizeof(char)固定为1可以省略 headers[0]->name = malloc(strlen("Content-Length") + 1); headers[0]->value = malloc(strlen(value) + 1); strcpy(headers[0]->name, "Content-Length"); strcpy(headers[0]->value, value); }
补充注意:如果
construct_HTTP_response函数不会自动释放传入的header相关内存,使用完response后需要按顺序手动释放内存避免泄漏:先释放每个HttpHeader的name、value字段,再释放HttpHeader实例,最后释放headers数组本身。
内容的提问来源于stack exchange,提问作者Joe Nissen
相关产品推荐
相关产品推荐

