簡體   English   中英

動態二維數組 - 缺少分段錯誤?

[英]dynamic 2d-array - missing segmentation fault?

我有以下代碼:

int **a = new int*[n+1];
for(int i = 0; i <= n; i++) a[i] = new int[1];

現在-據我了解-第一個語句為 n+1 個 int 指針分配 memory,在循環中,為每個 int 指針分配 1 * sizeof(int) memory(a[i] 是指向第一個 int 的指針) .

如果我 output 數組在 2 i = 0 到 n 循環中,它不會給出分段錯誤:

    for(int i = 0; i <= n; i++) {
      for(int j = 0; j <= n; j++)
         printf("%d ",a[i][j]);
      printf("\n");
   }

為什么我可以訪問 a[i][j] where j > 0,因為我只為一個 int 分配了 memory,而不會出現分段錯誤?

您的代碼有未定義的行為

創建 arrays 時,您的循環會為外部數組中的每個int*指針分配一個int[1]數組。 那沒問題。

稍后訪問 arrays 時,可以通過a[i]訪問int*指針,因為i不會超出a[]數組的范圍 go。 但是[j]確實 go 超出了范圍,因為0是唯一可以有效訪問int[1]數組元素的索引。

未定義的行為不保證會發生段錯誤。 在這種情況下,缺少段錯誤僅僅意味着您通過無效索引訪問的 memory 地址恰好在您程序的地址空間內有效,但它們在 arrays 的范圍內無效。所以你最終從周圍打印出隨機垃圾 memory。

暫無
暫無

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

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