指针/结构问题C



我有下面的代码会出错,我完全不知道为什么。如有任何帮助,我们将不胜感激。

当我执行此操作时,会发生segfault(检查是否所有内容都已正确初始化)。没有打印任何内容,所以它在第一行出现分段故障。不幸的是,我无法使用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 ;
 }

我没有看到您初始化result中包含的指针。您刚刚为它们分配了空间,似乎忘记在循环中执行result[i]=res。

首先。您应该正确缩进代码,否则您将无法读取自己的代码。

接下来,将result初始化为nb项的数组,而不进行初始化。

接下来,分配nb次指向(SharedStruct*)的指针,并为每个这样的结构分配一个缓冲区,但该缓冲区不会保留在任何位置,因此以后无法释放它。

相关内容

  • 没有找到相关文章

最新更新