【发布时间】:2012-09-15 15:35:11
【问题描述】:
我正在做一个使用套接字的应用程序,所以我将套接字句柄保存在一个数组中。我有以下代码:
while(0 == 0){
int * tx = (int*)(malloc((nr_con + 2) * sizeof(int)));
if (conexiuni != NULL)
{
syslog(LOG_NOTICE,"Ajung la eliberare %d",nr_con);
memcpy(&tx[0],&conexiuni[0],(sizeof(int) * (nr_con)));
syslog(LOG_NOTICE,"Ajung la eliberare %d",nr_con);
free(conexiuni);
}
conexiuni = tx;
syslog(LOG_NOTICE,"Ajung la mama %d",nr_con);
//The line bellow causes a segfault at second connection
if ((conexiuni[nr_con] = accept(hsock,(sockaddr*)(&sadr),&addr_size)) != -1)
{
nr_con++;
syslog(LOG_NOTICE,"Primesc de la %s",inet_ntoa(sadr.sin_addr));
syslog(LOG_NOTICE,"kkt %d",conexiuni[nr_con - 1]);
int * sz = (int*)malloc(sizeof(int));
*sz = conexiuni[nr_con - 1];
syslog(LOG_NOTICE,"after %d",*sz);
pthread_create(&tidi,0,&ConexiuniHandler, sz);
}
}
当我分配数组时第二次连接时,程序崩溃。我究竟做错了什么?我在 Windows 上尝试了相同的代码,它运行良好,但在 Linux 上它崩溃了。
【问题讨论】:
-
在 C++ 中使用
new而不是malloc。 -
请提供更多信息,说明您要完成的工作。这个来源没有多大意义。看起来你有一个无限循环,当你接受连接时,你正在分配内存来存储套接字句柄,所以它是某种接受连接然后启动线程来处理套接字连接的服务器?
-
@opc0de: 因为
malloc保留只是为了向后兼容 c。 C++ 代码应该使用new。 -
@Dani,老实说,甚至不要使用它。使用向量。对非数组
news 也使用智能指针。 -
new 具有面向对象编程的附加特性,为它的使用提供了比 malloc() 更简洁的接口。 malloc() 只是分配内存。 new 为 C++ 对象调用构造函数和其他好东西。
标签: c++ pointers segmentation-fault