セグメンテーション違反を起こす次のコードがありますが、その理由がまったくわかりません。どんな助けでも大歓迎です。
これを行うと、セグメンテーション違反が発生します(すべてが正しく初期化されているかどうかを確認するため)。何も出力されないため、最初の行で 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 ;
}