作者loveme00835 (恋さや)
看板C_and_CPP
標題Re: [問題] 關於realloc
時間Mon Jun 28 22:17:41 2010
※ 引述《lO (今天早上)》之銘言:
: 我在網路上找的資料幾乎都是一維例子
: 想問一下假如今天是二維的陣列呢
: 像以下這個例子
: int **Data,ColumnNumber=0;
: if (Need To Realloc a NewColumn)
: ColumeNumber++;
: Data=(int**)realloc(Data,ColumnNumber*sizeof(int*));
: 這樣的情況之下
: for(i)
: Data[0][i]到Data[Column-2][i]的Data有需要去複製嗎?
在這個情況下你只有配置了一堆指標, 還沒配置能夠儲存值的整數「空間」
就像下面這樣 :
┌───┐
Data ─→ │ ┼──→ ?
├───┤
│ ┼──→ ?
├───┤
.
.
.
如果是上面的圖示, 頂多只能用到一層括號 (Data[ 0 ]) 去取某個指標,
而不能用兩層括號 (Data[ 0 ][ 0 ])
: 還是說當上面那個realloc已經做好這一切了?
: 假如要的話
: 那該怎麼寫呢
: for(i;;)
: Data[i]=(int*)realloc(Data[i],一樣的size);
: 嗎?
: 表達能力不是很好~"~
: 謝謝各位
realloc 不會改到本來的指標的值, 所以要增加「列」的時候可以放心使
用, 不過你多配置的始終還是只有「一個整數指標」的空間, 還需要其他
配置的動作, 像是 :
int **Data = malloc( 1 * sizeof(int*) );
// 新增第一列的儲存空間, 10 個元素
Data[ 0 ] = malloc( 10 * sizeof(int) );
// 新增第二列, 5 個元素
Data = realloc( Data, 2 * sizeof(int*) );
Data[ 1 ] = malloc( 5 * sizeof(int) );
----------------------------------------------------------------
不過這樣會非常麻煩, 可以讓 STL 容器來幫你處理記憶體配置的問題,
如果只能用C, 我會建議你定義以下的結構 :
typedef struct
{
int content[100];
}OneDimensionArray;
然後用一個指標
OneDimensionArray *twoDimensionArray = malloc( sizeof(OneDimensionArray) );
把它當內建型態來用就好, 不過這樣存取就會相對比較麻煩
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
推 lO:其實我沒打出來(int*)malloc(sizeof(int)); 06/28 22:29
→ lO:不過還是謝謝你啦 06/28 22:29