2018年5月20日 星期日

C++ 動態配置/釋放多維陣列


動態一維

配置:
char*  buff = new char[len];
釋放:
delete[] buff;

動態二維
配置:
char**  buff =new char*[len1]

for(int i=0; i<len2;i++)
   buff[i]= new char[len2];

釋放:
for(int i=0; i<len2;i++)
 delete[] buff[i];

delete[] buff;

動態三維
char***  buff = new char**[len1];

for (int i = 0; i < len1; i++)
{
buff[i] = new char*[len2];
for (int j = 0; j < len2; j++)
buff[i][j] = new char[len3];
}
釋放:
for (int i = 0; i < len2; i++)
{
for (int j = 0; j < len2; j++)
delete[] buff[i][j];
delete[]buff[i];
}
delete[] buff;

可以發現跟stack的概念有點像(後進先出)


犯過的語法錯誤-1:

char** buff[i] = new (char*)[len];(X)
char** buff[i] = new char*[len];(0)
誇號把它刮起來會出現compiler error

(char*) 會出錯的原因應該是被compiler視作強制轉型的語法,而new後面應該是要接型別名稱才對
結論就是new 後面 不要亂夸型別

犯過的語法錯誤-2:

另外由於接觸過各類不同的語法,所以發生過[]與() 混淆的錯誤
int* buff[i] = new int(len);(X)
int* buff[i] = new int[len];(O)

兩者compiler都會過,然而
第一種可能會有run time error,原因在於()是用來配置初始值的,所以乍看會誤以為
配置了len長度的陣列,但是事實上只是配置了一個初始值為len的陣列







沒有留言:

張貼留言