[問題] 動態記憶體配置

看板C_and_CPP (C/C++)作者 (討戰是興趣)時間16年前 (2009/09/23 22:00), 編輯推噓13(13042)
留言55則, 6人參與, 最新討論串3/6 (看更多)
請問一下喔 我配置動態記憶體後 a = (int* )malloc(sizeof(int) * 1); b = (int* )malloc(sizeof(int) * 1); c = (int* )malloc(sizeof(int) * 1); 經過編譯後 執行至中斷點b 指標分別為 a (0x....正常), c (0xcccccccc) 但是b的指標卻是 0x00000000 不是應該要0x.....一些數字加英文 或是0xcccccccc嗎?? 謝謝各位啦~ -- ◢████◣ 其實,我平常就像其他女孩子一樣,靜靜的,很溫柔…… ────   ◢██████◣ ██████ ◥ ◤ ψRikakoWoods -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.149.100

09/23 22:23, , 1F
malloc回來的空間未初始化的話, 其內容值本來就沒有一定
09/23 22:23, 1F

09/23 22:24, , 2F
是什麼; 0xcccccccc與0xcdcdcdcd是VC的debug模式會幫你
09/23 22:24, 2F

09/23 22:24, , 3F
偷填值, 印象中是用來找定義但未使用到的變數用的....
09/23 22:24, 3F

09/23 22:28, , 4F
如果是malloc回來指標還是指在NULL, 那就是malloc失敗.
09/23 22:28, 4F

09/23 22:46, , 5F
嗯嗯~ 我也覺得是malloc失敗 那有啥解決辦法嗎??
09/23 22:46, 5F

09/23 22:47, , 6F
我程式是做影像處理的 前半部用了很多配置記憶體
09/23 22:47, 6F

09/23 22:48, , 7F
這有關聯嗎??
09/23 22:48, 7F

09/23 22:53, , 8F
去找找看IDE設定裡有沒有辦法把Heap size調大點, BCB我
09/23 22:53, 8F

09/23 22:53, , 9F
記得就有; 再來就是研究一下是不是真的有必要用這麼多
09/23 22:53, 9F

09/23 22:54, , 10F
記憶體, 有沒有可以重複用的, 有沒有可以用較小空間型
09/23 22:54, 10F

09/23 22:55, , 11F
態的. 當然code裡自己也要注意不要是自己寫壞記憶體的.
09/23 22:55, 11F

09/23 22:58, , 12F
等等, 如果中斷點設在b那行, 基本上它還沒被執行到啊!?
09/23 22:58, 12F

09/23 22:59, , 13F
如果code一開始有init b為NULL, 那此時它是NULL很合理
09/23 22:59, 13F

09/23 23:00, , 14F
啊; (連續)記憶體不夠是執行完b那一行以後b還是NULL.
09/23 23:00, 14F

09/23 23:05, , 15F
應該說已經執行完b那行了 但是指標仍是NULL
09/23 23:05, 15F

09/23 23:06, , 16F
我也剛試了FREE很多之前用的記憶體了 還是一樣ㄟ
09/23 23:06, 16F

09/23 23:18, , 17F
好吧~我再找找看其他方法好了 謝謝你摟^^
09/23 23:18, 17F

09/23 23:25, , 18F
才配置一個不太可能爆炸吧? 要不要貼整段
09/23 23:25, 18F

09/23 23:26, , 19F
那你先把a的那個改成*2 看可以配到嘛?
09/23 23:26, 19F

09/23 23:27, , 20F
我也覺得上面三行只是例子不是真的程式碼, 另外一個懷
09/23 23:27, 20F

09/23 23:27, , 21F
疑的地方就是size那邊最後算成0了, 才造成沒配空間@_@"
09/23 23:27, 21F
情況是這樣的 上面程式約有兩千多行 是執行影像處理的 上面用過很多類似的宣告 result = (int* )malloc(sizeof(int) * m_size * n_size); 而且我有用中斷點看過 m_size n_size 的值都是正確的 我本來想說是不是用太多malloc了 記憶體被吃光了 但是free很多之後 情況仍相同 我也試著把虛擬記憶體調大了 不過...Q_Q ※ 編輯: ioioioioioio 來自: 140.113.149.100 (09/23 23:34)

09/23 23:38, , 22F
除非你插的ram太少或系統/其他軟體用太多, 不然調虛擬記
09/23 23:38, 22F

09/23 23:39, , 23F
憶體不會有任何幫助; 想看記憶體用量又沒有工具, 最簡單
09/23 23:39, 23F

09/23 23:40, , 24F
的方法就是工作管理員拉出來看, 如果看起來使用量並沒有
09/23 23:40, 24F

09/23 23:40, , 25F
超過實際有的記憶體, 就先找找heap size去把它調大先.
09/23 23:40, 25F

09/23 23:54, , 26F
剛用工作管理員 記憶體吃362,108K
09/23 23:54, 26F

09/23 23:55, , 27F
那heap size要去哪調 我是用vc6
09/23 23:55, 27F

09/23 23:56, , 28F
吃到3xxM的記憶體!?那感覺就是heap爆了再也要不到了;
09/23 23:56, 28F

09/23 23:57, , 29F
heap/stack我只知道BCB6的調法, 待強者來解答吧XD
09/23 23:57, 29F

09/23 23:57, , 30F
請教樓上 為啥heap 這樣會爆 是系統有給每隻程式上限嘛??
09/23 23:57, 30F

09/23 23:59, , 31F
一個是你的編譯環境就做的限制, 讓你可以更有效的使用
09/23 23:59, 31F

09/24 00:00, , 32F
記憶體; 小弟我還沒寫到需要考慮系統給不給得了的程式XD
09/24 00:00, 32F

09/24 00:05, , 33F
恩@@ 我以為只有stack大小會需要調整 以前調整過vc6的= =
09/24 00:05, 33F

09/24 00:12, , 34F
而且我看他用掉頂多也才三百MB@@ 我剛剛自己用VC8 配置一G以
09/24 00:12, 34F

09/24 00:13, , 35F
都OK....難道VC6那年代記憶體都沒破G 所以限制很大嘛XD
09/24 00:13, 35F

09/24 00:23, , 36F
1998年發的開發工具嘛....
09/24 00:23, 36F

09/24 00:27, , 37F
那可以順便問一下 之前聽過的text segment這又算在哪裡呢?
09/24 00:27, 37F

09/24 00:28, , 38F
是算在heap嘛?? 還是怎麼算~ global 的東西都算在text seg嗎?
09/24 00:28, 38F

09/24 00:29, , 39F
那如果我再global寫 int *p=new int[5566]; 這是配置在heap還
09/24 00:29, 39F

09/24 00:29, , 40F
text@@ 對text沒什麼觀念 請多指教謝謝
09/24 00:29, 40F

09/24 00:30, , 41F

09/24 00:31, , 42F
順便一說, 你可以宣告global變數, 但是恐怕不能在
09/24 00:31, 42F

09/24 00:31, , 43F
global new吧....??
09/24 00:31, 43F

09/24 00:40, , 44F
可以阿直接初始 這是可以過得 不要分開寫就ok
09/24 00:40, 44F

09/24 00:52, , 45F
原來還真的可以這樣寫Orz 不過這麼做只能開compile time
09/24 00:52, 45F

09/24 00:53, , 46F
什麼是 開compile time@@
09/24 00:53, 46F

09/24 00:54, , 47F
就知道大小的array不是嗎?? 不過基本上應該不會在text
09/24 00:54, 47F

09/24 00:54, , 48F
區吧, wiki說這一區通常是放excutable code的啊XD
09/24 00:54, 48F

09/24 00:56, , 49F
Er~~我的推文被分開了........ XD
09/24 00:56, 49F

09/24 04:21, , 50F
請問這樣會有什麼影響嗎 譬如程式執行結果會如何
09/24 04:21, 50F

09/24 08:56, , 51F
Win32都一樣, allocate的上限是接近2GB
09/24 08:56, 51F

09/24 08:57, , 52F
不會因為VC6而有差異的, 除非你特別設定了一些編譯連結選項
09/24 08:57, 52F

09/24 08:59, , 53F
try LocalAlloc() / LocalFree
09/24 08:59, 53F

09/24 12:34, , 54F
WIN上heap有很多種 要用WIN API調整一下吧?
09/24 12:34, 54F

09/24 12:35, , 55F
而且有工具可以監看使用記憶體吧 可以分析一下
09/24 12:35, 55F
文章代碼(AID): #1AkYdwug (C_and_CPP)
文章代碼(AID): #1AkYdwug (C_and_CPP)