【发布时间】:2015-12-07 04:32:43
【问题描述】:
我需要将一个包含参数的结构传递给一些线程。其中一个参数是一个非常大的数组。我正在尝试做我之前所做的事情,我使用 malloc 在堆上创建数组,但我似乎无法弄清楚如何使用结构来做到这一点。然后我要做的是将一个不同的数组 memcpy 到 struct 数组中。
#define LIMIT 100000 //Size of seive
#define THNUMS 3 //Number of threads
struct ThreadParams
{
int id; // id
int low; // start
int high; // end
int *structprimes; // each thread's seive
structprimes = malloc(sizeof(int)*LIMIT);
};
然后我创建一个筛子,然后需要将该筛子复制到 structs 数组中。我可以使用堆栈上的较小数组来执行此操作(不完整):
struct ThreadParams ptharg[THNUMS];
memcpy(ptharg[i].structprimes, primes, sizeof(int)*LIMIT);
pthread_create(&tid, NULL, Work, (void*)&ptharg[i])
希望这有意义吗?如果可能的话,我想要做的是使用 malloc 在结构内创建一个数组?
编辑和解决方案:我最终做的是像这样制作结构:
struct ThreadParams
{
int id; // id
int low; // start
int high; // end
int *structprimes; // each thread's seive
};
然后在 main() 中使用 malloc 将内存分配给指针:
for (a = 0; a < THNUMS; a++)
{
ptharg[a].structprimes = malloc(sizeof(int)*LIMIT);
}
【问题讨论】:
-
我认为你只想要一个静态数组,而不是动态内存分配。
-
@JonathonReinhart 你是什么意思?就像不使用 malloc 只是像 int structprimes[LIMIT]; 一样正常创建数组?
-
int * structprimes = new int[LIMIT];应该可以帮助您。我怀疑你是否需要使用那个 malloc -
@nullpointer 这是一个 C 问题而不是 C++。
-
好的。著名的。 malloc 请求