gpt4 book ai didi

c - 在 sendto() 之后释放缓冲区时出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:31 24 4
gpt4 key购买 nike

在函数 sendto() 之后释放缓冲区 'pkt' 时出现段错误

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);

但我真的不能推荐它。

关于c - 在 sendto() 之后释放缓冲区时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com