Re: [問題] 關於realloc

看板C_and_CPP (C/C++)作者 (恋さや)時間16年前 (2010/06/28 22:17), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/28 22:29, , 1F
其實我沒打出來(int*)malloc(sizeof(int));
06/28 22:29, 1F

06/28 22:29, , 2F
不過還是謝謝你啦
06/28 22:29, 2F
文章代碼(AID): #1CAAy8HX (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
0
2
完整討論串 (本文為第 2 之 2 篇):
0
2
文章代碼(AID): #1CAAy8HX (C_and_CPP)