國立臺灣大學

#新手 宣告一個不知道大小,而且初始值都是null的array?

2020年7月28日 18:10
// 問題:怎麼宣告一個不知道大小,而且初始值都是null的array? // null在c語言裡沒有定義怎麼辦?
5
留言 18
文章資訊
Logo
每天有 6 則貼文
共 18 則留言
國立雲林科技大學
不初始為 0 就好嗎
原 PO - 國立臺灣大學
B1 可是0是可能會出現的值 不過感覺倒是可以 #define NULL -1 但動態配置未知大小的array 還不知道怎麼解決…
國立中正大學
2. NULL要大寫 1. 不知道大小的陣列要用malloc()在runtime的時候配置。再者,NULL是指標在用的,你的code宣告int的陣列,初始值也不該是NULL
原 PO - 國立臺灣大學
B3 我想要用一個表來記錄費式數列算過的值 如果表裡沒有值(除了NULL以外,不知道可以怎麼表示) 我才重新算一個值填進去 但是這個表會越來越長,而且不知道大小 怎麼用pointer做到這件事呢?
國立臺灣科技大學
通常C在這裡依照習慣會填負數代表沒有值 作法有三 1.每個值用pointer產生後append下去 2.你也可以先宣告一個固定大小的structure array等不夠用再宣告一個然後用append 的方式串起來 3.宣告一個array然後array size 為0
原 PO - 國立臺灣大學
b5 我把你提的3寫出來了
但是跑出來的結果 在89以後出錯 他不可能是overflow的問題 不知道是怎麼回事耶
國立臺灣科技大學
因為你超過合法的memory size了 建議還是用2
明新科技大學
[Global] int *map; int value = 100; ================================ [Main Code] map = malloc(sizeof(int)*value); fab(value); free(map); B6 你這狀況是Memory Leak
國立清華大學 資訊安全研究所
嗯... 你的問題 應該是 卡在 動態配置 陣列長度的問題 宣告 int array[N] 的意義是 他會挖 N 個 int 大小的 記憶體讓你存放東西 但是這個是固定的長度 超過就會有 B8 說的 mem leak (buffer overflow) 的問題 既然有靜態配置記憶體的說法 理所當然就有 動態配置記憶體的方法 動態配置記憶體 這方面跟 指標 非常有關係 (可能要先去理解一下 是什麼 ( 雖然 陣列的 宣告 也跟 指標很有關係 也可以 看一下 就拿 B8 的 code 來講解 首先 要有一個指標 int *map 再來 使用 malloc 配置一塊記憶體給 map map = malloc(sizeof(int)*value); 看到這裡 你可能會覺得 阿不是一樣要 先挖一塊算好大小的 記憶體 給 map 嗎? 所以可以搭配 realloc 去重新調整大小 要調整多大多小 就靠你程式去判斷 詳細可以 去 google malloc、realloc、free 深入一點 來說 其實也是可以考量 當前狀況 考慮是否真的 需要 用 動態配置 有時候 靜態配置 一開始 設大一點可能就是最好的做法了 (畢竟 relloc 這些 記憶體分配 情況不好時 還是會很吃效能 然後 第一個問題 null 在 C 裡面是大寫 NULL 如 B3 所說 NULL 是給 指標用的 按照你的 例子 你應該是 配置好記憶體時 利用 迴圈 將 每個值 設成你要的初始值 極度 不建議你 將 NULL define 成其他意思 可能會發生 你意想不到的問題 (不要把 保留字 另外 define) 回復你 B6 的問題 因為你配置了 0 個 int 大小空間 給 map 所以 你 塞東西進去給 map 已超出他合法使用的記憶體 所以造成 buffer overflow
世新大學 資訊管理學系
linked list
國立清華大學 資訊安全研究所
B10 他這情況 用 這個 效能很差吧 每次查表 都要 跑一遍耶
逢甲大學
可以看看:動態規劃 費氏數列
東海大學 資訊管理學系
value="\0" 宣告成字串的空格就好了
如果已知陣列大小的話 我喜歡用calloc 🤔🤔
國立成功大學
硬要靜態配置也是可以的,當你的array滿了的時候,宣告一個兩倍大的array,然後把現有的值複製過去。
B15 修但幾累 你是說這種寫法嗎? int array[2 * x] = {0}; 還是乖乖用calloc吧
匿名
這則留言已被刪除
已經刪除的內容就像 Dcard 一樣,錯過是無法再相見的!
慈濟大學 醫學資訊學系
B15 程式中央再宣告 沒記錯的話 純C是不允許的吧??