函数'pkt'
后释放缓冲区sendto()
时出现分段错误
u_char* create_pkt(u_char* pkt)
{
....
pkt = (u_char *)malloc(40);
...
return pkt
}
int main()
{
....
u_char* pkt;
create_pkt(pkt);
if (sendto(sd, pkt, 40, 0, (struct sockaddr *)&sin, sizeof(struct sockaddr)) < 0)
free(pkt);
}
调试信息显示:
Program received signal SIGSEGV, Segmentation fault.
0x0000003897482864 in __GI___libc_free (mem=0x7fffffffe010) at malloc.c:2986
这是怎么回事?谢谢!
2986 ar_ptr = arena_for_chunk(p);
2986 ar_ptr = arena_for_chunk(p);
最佳答案
create_pkt
函数返回新分配的值,因此需要在调用函数中使用该值。pkt =
create_pkt(pkt);
否则,程序将忽略指向已分配内存的指针,并使用pkt
的原始(未分配)值。
编辑:如果要将参数用作赋值对象,可以编写如下内容
void create_pkt(u_char** pkt)
{
....
*pkt = (u_char *)malloc(40);
...
}
并称之为
create_pkt(&pkt);
但我不能真的推荐。