簡體   English   中英

如何在結構中malloc一個數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM