【发布时间】:2012-08-02 18:48:10
【问题描述】:
我有以下段错误的代码,我完全不知道为什么。任何帮助将不胜感激。
当我这样做时会发生段错误(检查是否所有内容都已正确初始化)。没有打印任何内容,因此它在第一行出现段错误。不幸的是,我无法使用 valgrind,因为此代码位于我无法访问的沙箱中,因此无法检查那里的问题。
for (i = 0 ; i<nb_read ; i++) {
fprintf(stdout, "Read Lock i %d %p \n ",i, nap->read_buffer[i]->sem_handle);
fprintf(stdout, "Write Lock i %d %p \n ",i, nap->write_buffer[i]->sem_handle);
fprintf(stdout, "Read Buffer i %d %p \n ",i, nap->read_buffer[i]->buffer);
fprintf(stdout, "Write Buffer i %d %p \n ",i, nap->write_buffer[i]->buffer);
}
其中 SharedStruct 是具有 char* 缓冲区成员和 int sem_handle 的结构
SharedStruct** create_buffer(int nb, int size) {
SharedStruct** result = malloc(nb * sizeof(SharedStruct*));
int i = 0 ;
for (i = 0 ; i<nb ; i++) {
SharedStruct* res= malloc(nb *sizeof(SharedStruct));
res->buffer = malloc(size * sizeof(char));
int lock = initialise_protection();
fprintf(stdout, "\n Semaphore initialised to %d \n ", lock);
res->sem_handle = lock ;
}
return result ;
}
【问题讨论】:
-
你为什么不在自己的机器上编译它并在那里用
valgrind测试呢? -
另外,
nap是什么,它在哪里初始化?如果nap->read_buffer是char数组,那么这当然行不通。如果你做'a'->sem_handle,你期望结果是什么? -
为什么这样:SharedStruct* res= malloc(nb *sizeof(SharedStruct)); ?我会说:result[i] = malloc(sizeof(SharedStruct)); + 戈登贝利所说的
-
请显示调用 create_buffer 的代码。
-
您不知道第一个 fprintf 失败了,因为它可能正在缓冲字符串而不是在程序结束之前打印它。此外,您没有显示
nap的分配。
标签: c pointers constructor segmentation-fault