私が使用しているテストプログラムに少し問題があります。その値を更新しようとしてポインタを間接参照しようとすると、segfaultが発生します。SegfaultがC言語でintポインタを更新しています
これはと呼ばれる関数である:私が使用している場合
int main(void) {
t_init();
mbox_create(&mb);
t_create(producer, 1, 1);
t_create(producer, 2, 1);
t_create(consumer, 3, 1);
t_yield();
int len;
char mesg[1024];
mbox_withdraw(mb, mesg, &len); // should print a warning about the mailbox not having any messages
mbox_destroy(&mb);
t_shutdown();
printf("Done with mailbox test...\n");
fflush(stdout);
return 0;
}
::これは、呼び出し元の関数である
// Extracts a message from the community mailbox
void mbox_withdraw(struct mbox *mb, char *msg, int *len)
{
// Locks the semaphore
sem_wait(lock);
// If message node is null, there is no message, just return
if (mb->msg != NULL)
{
int var = strlen((mb->msg)->message);
len = &var;
strncpy(msg, (mb->msg)->message, len + 1);
// If there is only one message node
if ((mb->msg)->next == NULL)
{
(mb->msg)->message = NULL;
free((mb->msg)->message);
mb->msg = NULL;
free(mb->msg);
}
// There are more than one message, just take the first one
else
{
struct messageNode *temp = mb->msg;
mb->msg = (mb->msg)->next;
temp->message = NULL;
free(temp->message);
temp->next = NULL;
free(temp);
}
}
// Unlocks the semaphore
sem_signal(lock);
}
int var = strlen((mb->msg)->message);
len = &var;
ないセグメンテーションフォルトもちろんではありません値を更新する適切な方法。私が使用している場合:
int var = strlen((mb->msg)->message);
*len = var;
これはこのサイトの私の最初の投稿ですので、この投稿が厄介なようであればよろしくお願いいたします。
はい、問題はまさにその問題でした。私は間違った行を修正しようとしていました。ありがとうございました – stak0verflow