簡體   English   中英

創建一個二維數組,在編譯時一維未知

[英]Creating a 2d array, one dimension not known at compile time

我需要澄清兩件事:二維數組和長度在運行時確定的數組。 第一個長度未知,第二個已知為2。

char** mapping = new char*[2];//2d array
mapping[2][0] = 'a';

該程序由於寫入的內存未分配給該陣列而崩潰,該如何解決? 你能解釋一下你的答案嗎?

如果只有數組大小中的第一個是運行時值(其余均為編譯時值),則可以一次性分配它。 就您而言,對於運行時大小n

char (*mapping)[2] = new char[n][2];

“照常”訪問此數組,即作為mapping[i][j] ,其中i0..n-1范圍內, j0..1范圍內。

但是,除非您有一些特定的效率/布局要求,否則最好使用std::vector

您需要寫:

mapping[1] = new char(1);
mapping[1][0] = 'a';

2D數組中的每一行都應分別初始化,索引從0開始,最大可用索引為1,但是您嘗試訪問第3個1D數組。

這樣做就可以解決所有問題:

int size_x = 10, size_y = 20;
char* arr = new char[size_x*size_y];

char get(int x, int y) {
  return arr[x+y*size_x];
}

void set(int x, int y, char val) {
  arr[x+y*size_x]=val;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM