【发布时间】:2012-11-09 04:35:20
【问题描述】:
我有:
int array_id;
char* records[10];
// get the shared segment
if ((array_id = shmget(IPC_PRIVATE, 1, 0666)) == -1) {
perror("Array Creating");
}
// attach
records[0] = (char*) shmat(array_id, (void*)0, 0);
if ((int) *records == -1) {
perror("Array Attachment");
}
效果很好,但是当我尝试分离时,我得到一个“无效参数”错误。
// detach
int error;
if( (error = shmdt((void*) records[0])) == -1) {
perror(array detachment);
}
有什么想法吗?谢谢
【问题讨论】:
-
你怎么知道
shmat工作“很好”?您没有进行错误检查...并且 array_id 未初始化使用。 从不发布修改和不完整的代码,总是发布我们可以编译的完整和实际代码! -
@Jens 是的,他做到了,他正在检查错误是 = -1。我对 perror(array detachment) 部分感到困惑,这实际上是 c 中的东西吗?
-
对不起,我把错误检查出来了,但我在附加后确实检查了。我知道它工作得很好,因为我没有收到任何错误,我还分配了一些字符串并将它们打印出来。我被告知使用 perror() 而不是 printf() O.o
-
@Ben 不,他没有。我说的是附加,而不是分离。在附加失败时分离并不奇怪。
-
@Tim 除非您提供我们可以编译的完整、自包含的程序,否则这是无法诊断的。到目前为止,我们只有“医生,当我做某事时很痛”。 :-)
标签: c arrays ipc shared-memory detach