C++动态数组在分配时导致段错误

标签 c++ pointers segmentation-fault

我正在做一个使用套接字的应用程序,所以我将套接字句柄保存在一个数组中。我有以下代码:

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 上它崩溃了。

最佳答案

使用 std::vector .

a sequence container that encapsulates dynamic size arrays.

关于C++动态数组在分配时导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438700/

相关文章:

c++ - Boost spirit 需要永远解析表达式

c++ - 将 double 转换为 int 时抛出浮点异常

c - 在C中保存一个指针地址

c - 如何在 C 中将 char* 添加到 char**

Python 线程堆栈大小和段错误

c - 取消引用指向结构中指针的指针时出现段错误

c++ - 为什么在 Herb Sutter 的 CppCon 2014 演讲中不推荐使用值(value) setter 成员函数(回到基础 : Modern C++ Style)?

c++ - C++ 静态类 : undefined symbols 的 Clang 链接错误

c - 如何将结构体中的指针直接分配给新结构体?

通过函数分配数组并打印数组时出现 C 段错误