首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread malloc SegFault

pthread malloc SegFault
EN

Stack Overflow用户
提问于 2015-10-21 13:44:52
回答 2查看 364关注 0票数 0

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

代码语言:javascript
复制
void enqueue(char word[])
{
struct queue_node *new_node = malloc(sizeof(struct queue_node));
if(new_node == NULL)
{
    printf("Failed to allocate memory in enqueue\n");
    exit(-1);
}

new_node->word = malloc(sizeof(strlen(word)+1));
if(new_node->password == NULL)
{
    printf("Failed to allocate memory in enqueue for the password\n");
    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;


}

}

使用的结构如下:

代码语言:javascript
复制
struct queue_node
{
    char* password;
    struct queue_node *next_node;
};

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

GDB,其中,生成以下内容:

来自/usr/lib/libc.so.6的_int_malloc ()中的0 0x00007ffff71a3118

1来自/usr/lib/libc.so.6的malloc ()中的1 0x00007ffff71a43d4

2 0x00000000004017cd在main.c:217的入队(word=0x7ffff6d0deb0 "!!626Ru")中

3 0x0000000000401779,位于main.c:195的Dictionary_fill (arg=0x7fffffffeba5)中

4来自/usr/lib/libpthread.so.0的start_thread ()中的4 0x00007ffff74d44a4

5来自/usr/lib/libc.so.6的clone ()中的5 0x00007ffff721213d

我猜我用malloc分配错误了,但我已经找了几天了,头撞在墙上,似乎就是找不到。

EN

回答 2

Stack Overflow用户

发布于 2015-10-21 13:47:30

这是错误的:

代码语言:javascript
复制
new_node->word = malloc(sizeof(strlen(word)+1));

你不希望sizeof在其中,否则你没有为你的字符串分配足够的存储空间。

当然应该是:

代码语言:javascript
复制
new_node->word = malloc(strlen(word)+1);
票数 2
EN

Stack Overflow用户

发布于 2015-10-21 13:47:57

代码语言:javascript
复制
 new_node->word = malloc(sizeof(strlen(word)+1));

不要在这里使用sizeof。只需要写-

代码语言:javascript
复制
new_node->word = malloc(strlen(word)+1);

在这里,您将内存分配给new_node->word,因此检查它的NULL -

代码语言:javascript
复制
if(new_node->password == NULL)

去看看这个-

代码语言:javascript
复制
if(new_node->word== NULL)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33251779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档