C语言 pthread malloc SegFault



我正在尝试使用链表创建缓冲区队列。我正在使用 pthreads 作为生成线程和多个读取线程。我的程序正确地使用 pthread 打开文件并开始将文件的行读取到 char plain_text[120];并添加一个 null 字符,然后将该参数传递到以下函数中。

void enqueue(char word[])
{
struct queue_node *new_node = malloc(sizeof(struct queue_node));
if(new_node == NULL)
{
    printf("Failed to allocate memory in enqueuen");
    exit(-1);
}
new_node->word = malloc(sizeof(strlen(word)+1));
if(new_node->password == NULL)
{
    printf("Failed to allocate memory in enqueue for the passwordn");
    exit(-1);
}
strcpy(new_node->word, word);
new_node->next_node = NULL;
enqueued++;
if(head==NULL)
{
    head = new_node;
    previous_node = head;
    current_node = head;                    
    deleting_node = head;
}
else
{
    previous_node->next_node = new_node;
    previous_node = previous_node->next_node;

}
}

使用的结构是这样的:

struct queue_node
{
    char* password;
    struct queue_node *next_node;
};

我的代码运行了大约 2000 个单词,然后用 SegFault 击中了我。

GDB 其中,产生这个:

0 0x00007ffff71a3118 in _int_malloc (( 来自/usr/lib/libc.so.6

1 0x00007ffff71a43d4 in malloc (( from/usr/lib/libc.so.6

2 0x00000000004017cd排队 (word=0x7ffff6d0deb0 "!!626Ru"( 在主.C:217

3 0x0000000000401779 in Dictionary_fill (arg=0x7fffffffeba5( 在主.c:195

4 0x00007ffff74d44a4 in start_thread (( from/usr/lib/libpthread.so.0

克隆 (( 中的 5 0x00007ffff721213d 来自/usr/lib/libc.so.6

猜我用malloc分配不当,但是我已经搜索了几天,把头撞在墙上,似乎无法弄清楚。

这是

错误的:

new_node->word = malloc(sizeof(strlen(word)+1));

您不希望sizeof在那里,否则您将无法为字符串分配足够的存储空间。

当然应该是:

new_node->word = malloc(strlen(word)+1);
 new_node->word = malloc(sizeof(strlen(word)+1));

不要在这里使用sizeof.就写——

new_node->word = malloc(strlen(word)+1);

在这种情况下,您将内存分配给new_node->word因此请检查它是否NULL -

if(new_node->password == NULL)

检查这个 -

if(new_node->word== NULL)

最新更新