[英]How to malloc an array inside a struct
我需要將包含參數的結構傳遞給某些線程。 其中一個參數是一個非常大的數組。 我正在嘗試做我之前所做的事情,我使用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);
};
然后我創建一個篩子,然后需要將此篩子復制到結構陣列。 我能夠使用類似的東西(不完整)在堆棧上使用較小的數組執行此操作:
struct ThreadParams ptharg[THNUMS];
memcpy(ptharg[i].structprimes, primes, sizeof(int)*LIMIT);
pthread_create(&tid, NULL, Work, (void*)&ptharg[i])
希望這有道理嗎? 我想要做的是使用malloc在struct中創建一個數組,如果可能的話?
編輯和解決方案:我最終做的是制作這樣的結構:
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);
}
在C中,不可能在結構定義中包含語句。 相反,您需要聲明變量然后初始化變量,包括任何動態內存。 例如:
struct ThreadParams ptharg[THNUMS];
int ix;
for (ix = 0; ix < THNUMS; ix++) {
ptharg[ix].structprimes = malloc(sizeof(int)*LIMIT);
if (!ptharg[ix].structprimes) {
/* error handling goes here */
}
}
或者,可以在結構中靜態聲明該數組。 例如:
struct ThreadParams
{
int id; // id
int low; // start
int high; // end
int structprimes[LIMIT]; // each thread's seive
};
但是,您的方法存在第二個可能的問題。 你沒有顯示struct ThreadParams ptharg[THNUMS];
位於。 但是如果它在除main
之外的任何函數內部,則它不能作為數據參數傳遞給子線程,因為它將是一個自動變量,當該函數退出時超出范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.