Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C共享存储器Seg故障_C_Shared Memory_Mmap - Fatal编程技术网

C共享存储器Seg故障

C共享存储器Seg故障,c,shared-memory,mmap,C,Shared Memory,Mmap,我现在正在做一个使用共享内存的项目,遇到了一个令人难以置信的seg故障。由于某些原因,并非我分配给*节点的所有内存都是可访问的。在某个索引处(程序每次运行时相同),内存无法写入。下面是我的代码和一些输出 int shf = shm_open("/queue", O_RDWR|O_CREAT, 0666); int success = ftruncate(shf, sizeof(QNode)*numVertices*numVertices); QNode *node = (QNode*) mmap

我现在正在做一个使用共享内存的项目,遇到了一个令人难以置信的seg故障。由于某些原因,并非我分配给*节点的所有内存都是可访问的。在某个索引处(程序每次运行时相同),内存无法写入。下面是我的代码和一些输出

int shf = shm_open("/queue", O_RDWR|O_CREAT, 0666);
int success = ftruncate(shf, sizeof(QNode)*numVertices*numVertices);
QNode *node = (QNode*) mmap(NULL, sizeof(QNode)*numVertices*numVertices, PROT_READ|PROT_WRITE, MAP_SHARED, shf, 0); 

int a, b;
for (a=0; a<numVertices; a++) {
    for (b=0; b<numVertices; b++) {
        (node[sizeof(QNode)*a*numVertices + sizeof(QNode)*b]).k = a;                
        (node[sizeof(QNode)*a*numVertices + sizeof(QNode)*b]).i = b;
        printf("Mapping to offset %d\ti:%d\tk:%d\n", sizeof(QNode)*a*numVertices + sizeof(QNode)*b, (node[sizeof(QNode)*a*numVertices + sizeof(QNode)*b]).i,(node[sizeof(QNode)*a*numVertices + sizeof(QNode)*b]).k);
    }
}
在下面较大的图形输出中,有一些更令人费解的结果,我不能在这里发布——在偏移量7168处,它开始打印出不可打印的字符。例如,在偏移量7168的行中,我看到Ma[NUL][NUL][NUL][NUL][NUL][SI][NUL][NUL][NUL]偏移量7168。。。这是我可以为您展示的较大图形的输出——在最后一行it seg故障之后

较大图形上的输出:

// Bunch of output
Mapping to offset 9136  i:54    k:17
Mapping to offset 9144  i:55    k:17
Mapping to offset 9152  i:56    k:17
Mapping to offset // This is where it seg faults...

非常感谢您的帮助

嗯。。。你真的想像
node[sizeof(QNode)*a*numvities+sizeof(QNode)*b]那样索引吗?C会自动将索引与指向的结构的大小相乘,因此我觉得
node[a*numVertices+b]
看起来更理智

// Bunch of output
Mapping to offset 9136  i:54    k:17
Mapping to offset 9144  i:55    k:17
Mapping to offset 9152  i:56    k:17
Mapping to offset // This is where it seg faults...