是否可以用C聲明二維數組,然後再設置它的大小?我知道在C中你必須處理記憶等事情,但儘管我全部搜索,但我仍無法找到這個問題的答案。設置二維數組,稍後更改大小 - C
我現在的例子是..
int boardsize, linewin;
char array[1][1];
//boardsize is set within here.
array = [boardsize][boardsize];
是否可以用C聲明二維數組,然後再設置它的大小?我知道在C中你必須處理記憶等事情,但儘管我全部搜索,但我仍無法找到這個問題的答案。設置二維數組,稍後更改大小 - C
我現在的例子是..
int boardsize, linewin;
char array[1][1];
//boardsize is set within here.
array = [boardsize][boardsize];
在C則需要使用指針做自己的動態數組管理。
請參閱以下文章,瞭解如何使用分配的內存區域進行操作。
Using malloc for allocation of multi-dimensional arrays with different row lengths
既然你正在尋找修改這些,你可能還需要使用realloc()
功能或free()
函數來釋放分配的內存。
有關使用realloc()函數的信息,請看下面的堆棧溢出。
two-dimensional dynamic array (realloc in c)
EDIT - 添加例如
這裏有兩個函數來malloc()
的二維陣列和一個realloc()
二維陣列。如果您將空指針傳遞給realloc2dCArray()
以重新分配內存區域,則實際上可以使用realloc()
版本。
我所試圖做的是使用一個單一的malloc()
和realloc()
所有需要,讓您可以到free()
單個呼叫free()
這些內存中。
char **malloc2dCArray (int nRows, int nCols)
{
// use a single malloc for the char pointers to the first char of each row
// so we allocate space for the pointers and then space for the actual rows.
char **pArray = malloc (sizeof(char *) * nRows + sizeof(char) * nCols * nRows);
if (pArray) {
// calculate offset to the beginning of the actual data space
char *pOffset = (char *)(pArray + nRows);
int i;
// fix up the pointers to the individual rows
for (i = 0; i < nRows; i++) {
pArray[i] = pOffset;
pOffset += nCols;
}
}
return pArray;
}
char **realloc2dCArray (char **pOld, int nRows, int nCols)
{
// use a single realloc for the char pointers to the first char of each row
// so we reallocate space for the pointers and then space for the actual rows.
char **pArray = realloc (pOld, sizeof(char *) * nRows + sizeof(char) * nCols * nRows);
if (pArray) {
// calculate offset to the beginning of the actual data space
char *pOffset = (char *)(pArray + nRows);
int i;
// fix up the pointers to the individual rows
for (i = 0; i < nRows; i++) {
pArray[i] = pOffset;
pOffset += nCols;
}
}
return pArray;
}
要使用這些功能,你會做類似如下:
char **pChars = malloc2dCArray (16, 8);
int i, j;
for (i = 0; i < 16; i++) {
for (j = 0; j < 8; j++) {
pChars[i][j] = 0;
}
}
做一個realloc()
你將要檢查realloc()
工作得使用一個臨時變量,並在使用前檢查NULL它。
{
char **pChars2 = realloc2dCArray (pChars, 25, 8);
if (pChars2) pChars = pChars2;
}
你也可以只使用realloc()
版本,如果你提供了一個NULL指針,因爲realloc()
會做malloc()
如果指針到內存realloc()
爲NULL。
我使用調試器對此進行了一些測試,看起來它對我有用。
您將需要使用'malloc()'分配內存,並使用指向已分配內存的指針並將內存視爲二維數組。 – 2014-09-22 23:49:05
請參閱http://stackoverflow.com/questions/13677566/malloc-a-2d-array-in-c,其中描述了該過程。和這一個以及http://stackoverflow.com/questions/1970698/using-malloc-for-allocation-of-multi-dimensional-arrays-with-different-row-lengt – 2014-09-22 23:50:15
c是更多的機器導向和機器不會對此感到滿意。 – HuStmpHrrr 2014-09-23 00:47:49