c - 以下函数在 strncpy 上给出段错误,有人可以解释为什么会发生此段错误

标签 c segmentation-fault

IFNAMSIZ = 16

static STATUS_CODE __bind(int sock_fd, const char *interface)
    {

            struct sockaddr sock_addr;
            memset(&sock_addr, '\0', sizeof(sock_addr));
            strncpy(sock_addr.sa_data, interface, IFNAMSIZ);
            sock_addr.sa_family = AF_PACKET;

            if (bind(sock_fd, &sock_addr, sizeof(struct sockaddr)) < 0) {
                    EPRINT("bind failed: %s", strerror(errno));
                    return FAILURE;
            }
        return SUCCESS;
}

最佳答案

can someone explain why this segmentation fault occurs

在 Linux 上,您的代码可能会出现堆栈缓冲区溢出:

strncpy(sock_addr.sa_data, interface, IFNAMSIZ);

假设IFNAMSIZ = 16,因为sizeof(sa_data) == 14。但是,这极不可能导致 strncpy 中出现 SIGSEGV - 堆栈上还有大量其他数据。

更可能导致崩溃的原因是您传入的接口(interface)NULL。通过使用调试信息(通常是 -g 标志)编译程序并在调试器下运行它,这应该是显而易见的。

关于c - 以下函数在 strncpy 上给出段错误,有人可以解释为什么会发生此段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50582009/

相关文章:

python - 是否可以用另一种语言为一种语言编写自动垃圾收集器?

C - 无法在我的程序中启动堆栈

将BMP转换为灰度图

c++ - Mac High Sierra 上 C++ 中的段错误 11

c - 通过套接字传输压缩文件?

c - GCC编译问题- fatal error : cannot find 'ld'

c - 我正在编写这段代码来分配一些内存并返回指针,但我收到段错误错误

c++ - 在 C++ 中调用 "new"时出现段错误?

c - g_string_truncate () 上的段错误?

c++ - Qt - C++ 字符串连接段错误