0
shm_openのおかげで作成され、void ** table
を含む構造体を含む共有メモリゾーンのテーブルにアクセスしようとしています。 さまざまなmallocのおかげでそれを初期化しました しかし、私はそれにアクセスしようとすると、私はセグメンテーション違反を取得します。 私はそれがmemcpy命令のためだと推測していますが、私はなぜそれがわかりません。誰かが私を助けることができますか?shm_memory + mmap + table + struct
バグのある部分があります。
if(channel->index > 0){
if(DEBUG){
printf("channel_recv : channel->index > 0 (%d) \n",channel->index);
}
if(memcpy(data,channel->tampon[0],channel->eltsize)==NULL){
return -1;
}
printf("apres memcpy \n");
defile(channel);
return 1;
}
初期化があります。
channel = (struct channel *)malloc(sizeof(struct channel));
channel->tampon = malloc(size * sizeof(void *));
for(i = 0 ; i < size;i++){
channel->tampon[i] = malloc(eltsize * sizeof(void));
}
「汚す」機能は左にそれにすべての要素を移動します。
とあなたは 'channel-> eltsize'をどこかで非ゼロ値に設定しますか? – wildplasser
はいchannel-> eltsizeとchannel-> sizeが指定されていて、0または負でないかどうかをテストします。実際には、バグがmemcpy、特にチャネル - タンポンに関係する部分は、セグメンテーションフォールト – kevin556
このコードは、iffyのように見えます...チャネル構造体の定義など、より多くのコンテキストを含めることができます。あなたはsizeof(void)でどのくらいのメモリを割り当てようとしていますか? – kcraigie