2009-11-01 97 views
0

我想創建一個緩衝區數組。我需要在每個緩衝區中存儲一個整數。我不太確定這應該怎麼做。C編程中的緩衝區數組?

int BUFFER_LENGTH = 50; //the size of each buffer 
int numberOfBuffers = 10; //number of buffers 
int *pBuffers;   //array of buffers 

    pBuffers = (int *) calloc (numberOfBuffers, sizeof(int)); //make array size of numberOfBuffers 

    int i; 
    for (i = 0; i < n; i++){  //initialize each buffer to zero. 
     &pBuffers[i] = 0x00; 
    } 

什麼是我做錯了?這段代碼並不真正起作用。

+0

等等,這裏BUFFER_LENGTH的目的是什麼?每個緩衝區是否存儲多個整數,或者緩衝區是否只存儲一個整數?另外,for循環中的'n'是什麼?你有沒有理由不使用memset來初始化緩衝區? – Amber

+0

你只需要在每個緩衝區中只存儲一個整數? '&pBuffers [i]'也不能在任務站的左側。 –

+0

n的值是多少? – dicroce

回答

4

您可能想分配足夠的空間。就在那裏,你只能爲10個整數分配足夠的空間;看起來像你想分配足夠的500.簡單的方法是int buffers[10][50]。但是如果你想calloc,你必須calloc(BUFFER_LENGTH, sizeof(int))numberOfBuffers次。

此外,calloc自動清除分配的內存,所以不需要這樣做。

#define BUFFER_LENGTH 50 /* the size of each buffer */ 
#define BUFFERS 10  /* number of buffers  */ 
int **pBuffers;   /* array of buffers  */ 

pBuffers = calloc (BUFFERS, sizeof(int *)); //make array of arrays 
int i; 
for (i = 0; i < BUFFERS; i++) { 
    pBuffers[i] = calloc(BUFFER_LENGTH, sizeof(int)); // make actual arrays 
} 
+0

這是正確的,我不得不每次在數組中創建一個新的緩衝區。 – user69514

+0

如何初始化每個緩衝區爲零?我得到以下錯誤: functions.h:28:警告:賦值時將指針整數,未作鑄 所以當我嘗試打印每一個元素,我得到一個分段錯誤 – user69514

+0

釋放calloc零出內存分配 – jmucchiello

0

我用C很生疏,但我想你應該改變

&pBuffers[i] = 0x00; 

pBuffers[i] = 0x00; 

(第[i]意味着你已經訪問的位置項目我所以沒有必要添加&。)

但我可能是錯的:-(

0

我想你的要求是一個數組的數組,這不是你在代碼中做的,而是你創建了一個數組。

試着這麼做:

#define BUFFER_LENGTH 50 
#define numberOfBuffers 10 

int** pBuffers; 

pBuffers = (int**) calloc(numberOfBuffers, sizeof(int*)); 

for (int i = 0; i < numberOfBuffers; i++) 
    pBuffers[i] = (int*) calloc(BUFFER_LENGTH, sizeof(int)); 

正如有人說釋放calloc初始化爲0,這樣你就不必重複工作。您可能需要在for循環之外定義int i,具體取決於您使用的C版本。

還有一些其他的東西,可以在同一時間:)

1

要創建什麼與你的樣品是整數數組說一下風格和命名規範,但一個步驟。相反,您需要創建一個整數數組的數組。設置是相似的,但您需要將該變量聲明爲int**並分別分配每個緩衝區。

int **ppBuffer = (int**) calloc(numberOfBuffers, sizeof(int*)); 
for(int i = 0; i < numberOfBuffers; ++i) 
    ppBuffer[i] = (int*) calloc(BUFFER_LENGTH, sizeof(int)); 

沒有太多的點經歷和自釋放calloc初始化數組爲0,則已經爲你做的。

當然,更簡單的事情,如果你知道每個緩衝區的大小將是常量將是把它的堆棧(和改變你INT尺寸常量):

int ppBuffer[numberOfBuffers][BUFFER_LENGTH] = { 0 }; 
+0

我想創建一個緩衝區數組。所有這些緩衝區將充當不同進程之間的共享內存。每個進程都會讀取和寫入一個整數給緩衝區。 所以基本上我需要一個緩衝區數組,並且最初將整數零存儲在每個緩衝區中。我一直得到這個錯誤: 賦值使得指針中的整數沒有轉換 – user69514

+0

將會在這一行 bufferArr [i] =(int *)calloc(BUFFER_LENGTH,sizeof(int)); – user69514

+0

我將(int *)更改爲(int),並且不再發生錯誤。但是,當我嘗試從緩衝區中讀取數據時,仍然出現分段錯誤。 – user69514