首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么pthread_create()返回12?

为什么pthread_create()返回12?
EN

Stack Overflow用户
提问于 2011-12-31 11:58:52
回答 3查看 3.6K关注 0票数 1

由于某些原因,pthread_create不允许我将struct作为参数传递。这个问题与系统无关,尽管我还没有机会在任何人的机器上测试它。由于某种原因,它不允许我传递struct;它返回错误#12。

问题不在内存。我知道12是ENOMEM,“应该是这样”,但它不是..它就是不接受我的struct作为指针。

代码语言:javascript
代码运行次数:0
运行
复制
struct mystruct info;    
info.website = website;
info.file = file;
info.type = type;
info.timez = timez;
for(threadid = 0; threadid < thread_c; threadid++)
   {
    // printf("Creating #%ld..\n", threadid);
    retcode = pthread_create(&threads[threadid], NULL, getstuff, (void *) &info);
   //void * getstuff(void *threadid);

当我在GDB中运行这段代码时,由于某种原因,它没有返回代码12。但是当我从命令行运行它时,它返回12。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-31 12:02:11

Linux上的错误代码12:

代码语言:javascript
代码运行次数:0
运行
复制
#define ENOMEM          12      /* Out of memory */

您的内存可能已用完。确保您没有分配太多的线程,并确保在线程分配完成时使用pthread_join线程(或使用pthread_detach)。确保你不会通过其他方式耗尽你的内存。

票数 7
EN

Stack Overflow用户

发布于 2011-12-31 12:02:50

将堆栈对象作为参数传递给pthread_create是一个非常糟糕的想法,我会将其分配到堆上。错误12是ENOMEM。

票数 2
EN

Stack Overflow用户

发布于 2011-12-31 12:03:03

尝试添加一些适当的错误处理。

代码语言:javascript
代码运行次数:0
运行
复制
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
static void fail(const char *what, int code)
{
    fprintf(stderr, "%s: %s\n", what, strerror(code));
    abort();
}

...
if (retcode)
    fail("pthread_create", retcode);

在我的系统上,12是ENOMEM (内存不足)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8686171

复制
相关文章

相似问题

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