作者 主題: 請問我要用malloc設定陣列大小可是都會超過我的範圍 為何呢?  (閱讀 3361 次)

0 會員 與 1 訪客 正在閱讀本文。

平衡

  • 活潑的大學生
  • ***
  • 文章數: 213
    • 檢視個人資料
我用int *p=(int*)malloc(sizeof(int)*2);
我覺得它應該只能夠放兩個整數阿
可是,我都三個以上進去也都沒問題,為何呢?
如果,我要設定陣列大小,要怎們做呢?

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
我用int *p=(int*)malloc(sizeof(int)*2);
我覺得它應該只能夠放兩個整數阿
可是,我都三個以上進去也都沒問題,為何呢?

若你有學過 java or python 這類語言,c/c++ 與這類語言並不一樣。

在 c/c++ 內若你已經把東西放在不屬於你的地方,還在程式自己記憶體範圍內就覆寫了某個地方的資料,放到了其他人的程式區域直接當掉。

引用
如果,我要設定陣列大小,要怎們做呢?

不大懂你的需求意思?

I am kenduest - 小州

my website: http://kenduest.sayya.org/

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
你是指要動態變更陣列大小嗎?

首先要先配置一個更大的
然後複製過去
再把原來的釋放掉

對,C 語言本身沒有提供自動幫你處理這問題的機制。

如果你懶得弄,我建議可以使用 glib 這個 library,裏面提供了很多資料結構與演算法...等等的
例如 Arrays 裡的例子

代碼: [選擇]
 GArray *garray;
  gint i;

  /* We create a new array to store gint values.
     We don't want it zero-terminated or cleared to 0's. */
  garray = g_array_new (FALSE, FALSE, sizeof (gint));
  for (i = 0; i < 10000; i++)
    g_array_append_val (garray, i);

  for (i = 0; i < 10000; i++)
    if (g_array_index (garray, gint, i) != i)
      g_print ("ERROR: got %d instead of %d\n",
               g_array_index (garray, gint, i), i);

  g_array_free (garray, TRUE);
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

平衡

  • 活潑的大學生
  • ***
  • 文章數: 213
    • 檢視個人資料
謝謝 我知道為何有此情形了