代码之家  ›  专栏  ›  技术社区  ›  hookenz

mmap SIGSEGV当内存映射到类成员并在类外修改时

c++
  •  0
  • hookenz  · 技术社区  · 14 年前

    该区域被映射到名为data\的成员变量,该变量被定义为unsigned char*data;

    内存映射部分如下所示:

    // Create memory mapped file
    unsigned char* data_ = (unsigned char*)mmap(NULL, 1024, 
                               PROT_READ | PROT_WRITE, MAP_SHARED, fd_, 0);
    
    if (block_data_ == MAP_FAILED) {
        throw Exception(std::string("mmap: ") + strerror(errno));
    }
    

    但是,目的不是这样做。我有一个函数,返回一个指向数据的指针。
    当我简单地创建块时,它会一直正常工作,直到我尝试写入类外的数据为止。就在那时我得到了一个信号。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Lajnold    14 年前

    我不太清楚你到目前为止所做的是什么意思。在您发布的代码中,似乎指定了 mmap data_ 而不是成员变量 数据_ . 这只是当前的“工作”版本(不打算使用成员变量),还是一个错误?

    数据_ ? 不是吗 数据_ 数据_ 数据_

    在类外使用mmapped内存与在类内使用mmapped内存应该没有什么区别,因此在我看来,在赋值或返回成员变量时,您可能做错了什么 数据_

    block_data 而不是 数据_