推 VictorTom:malloc回來的空間未初始化的話, 其內容值本來就沒有一定 09/23 22:23
→ VictorTom:是什麼; 0xcccccccc與0xcdcdcdcd是VC的debug模式會幫你 09/23 22:24
→ VictorTom:偷填值, 印象中是用來找定義但未使用到的變數用的.... 09/23 22:24
推 VictorTom:如果是malloc回來指標還是指在NULL, 那就是malloc失敗. 09/23 22:28
→ ioioioioioio:嗯嗯~ 我也覺得是malloc失敗 那有啥解決辦法嗎?? 09/23 22:46
→ ioioioioioio:我程式是做影像處理的 前半部用了很多配置記憶體 09/23 22:47
→ ioioioioioio:這有關聯嗎?? 09/23 22:48
推 VictorTom:去找找看IDE設定裡有沒有辦法把Heap size調大點, BCB我 09/23 22:53
→ VictorTom:記得就有; 再來就是研究一下是不是真的有必要用這麼多 09/23 22:53
→ VictorTom:記憶體, 有沒有可以重複用的, 有沒有可以用較小空間型 09/23 22:54
→ VictorTom:態的. 當然code裡自己也要注意不要是自己寫壞記憶體的. 09/23 22:55
推 VictorTom:等等, 如果中斷點設在b那行, 基本上它還沒被執行到啊!? 09/23 22:58
→ VictorTom:如果code一開始有init b為NULL, 那此時它是NULL很合理 09/23 22:59
→ VictorTom:啊; (連續)記憶體不夠是執行完b那一行以後b還是NULL. 09/23 23:00
→ ioioioioioio:應該說已經執行完b那行了 但是指標仍是NULL 09/23 23:05
→ ioioioioioio:我也剛試了FREE很多之前用的記憶體了 還是一樣ㄟ 09/23 23:06
→ ioioioioioio:好吧~我再找找看其他方法好了 謝謝你摟^^ 09/23 23:18
推 QQ29:才配置一個不太可能爆炸吧? 要不要貼整段 09/23 23:25
→ QQ29:那你先把a的那個改成*2 看可以配到嘛? 09/23 23:26
→ VictorTom:我也覺得上面三行只是例子不是真的程式碼, 另外一個懷 09/23 23:27
→ VictorTom:疑的地方就是size那邊最後算成0了, 才造成沒配空間@_@" 09/23 23:27
情況是這樣的
上面程式約有兩千多行 是執行影像處理的
上面用過很多類似的宣告 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)
→ VictorTom:除非你插的ram太少或系統/其他軟體用太多, 不然調虛擬記 09/23 23:38
→ VictorTom:憶體不會有任何幫助; 想看記憶體用量又沒有工具, 最簡單 09/23 23:39
→ VictorTom:的方法就是工作管理員拉出來看, 如果看起來使用量並沒有 09/23 23:40
→ VictorTom:超過實際有的記憶體, 就先找找heap size去把它調大先. 09/23 23:40
→ ioioioioioio:剛用工作管理員 記憶體吃362,108K 09/23 23:54
→ ioioioioioio:那heap size要去哪調 我是用vc6 09/23 23:55
→ VictorTom:吃到3xxM的記憶體!?那感覺就是heap爆了再也要不到了; 09/23 23:56
→ VictorTom:heap/stack我只知道BCB6的調法, 待強者來解答吧XD 09/23 23:57
推 QQ29:請教樓上 為啥heap 這樣會爆 是系統有給每隻程式上限嘛?? 09/23 23:57
推 VictorTom:一個是你的編譯環境就做的限制, 讓你可以更有效的使用 09/23 23:59
→ VictorTom:記憶體; 小弟我還沒寫到需要考慮系統給不給得了的程式XD 09/24 00:00
推 QQ29:恩@@ 我以為只有stack大小會需要調整 以前調整過vc6的= = 09/24 00:05
→ QQ29:而且我看他用掉頂多也才三百MB@@ 我剛剛自己用VC8 配置一G以 09/24 00:12
→ QQ29:都OK....難道VC6那年代記憶體都沒破G 所以限制很大嘛XD 09/24 00:13
推 VictorTom:1998年發的開發工具嘛.... 09/24 00:23
推 QQ29:那可以順便問一下 之前聽過的text segment這又算在哪裡呢? 09/24 00:27
→ QQ29:是算在heap嘛?? 還是怎麼算~ global 的東西都算在text seg嗎? 09/24 00:28
→ QQ29:那如果我再global寫 int *p=new int[5566]; 這是配置在heap還 09/24 00:29
→ QQ29:text@@ 對text沒什麼觀念 請多指教謝謝 09/24 00:29
→ VictorTom:順便一說, 你可以宣告global變數, 但是恐怕不能在 09/24 00:31
→ VictorTom:global new吧....?? 09/24 00:31
→ QQ29:可以阿直接初始 這是可以過得 不要分開寫就ok 09/24 00:40
推 VictorTom:原來還真的可以這樣寫Orz 不過這麼做只能開compile time 09/24 00:52
→ QQ29:什麼是 開compile time@@ 09/24 00:53
→ VictorTom:就知道大小的array不是嗎?? 不過基本上應該不會在text 09/24 00:54
→ VictorTom:區吧, wiki說這一區通常是放excutable code的啊XD 09/24 00:54
→ VictorTom:Er~~我的推文被分開了........ XD 09/24 00:56
→ FAITHY:請問這樣會有什麼影響嗎 譬如程式執行結果會如何 09/24 04:21
→ WPC001:Win32都一樣, allocate的上限是接近2GB 09/24 08:56
→ WPC001:不會因為VC6而有差異的, 除非你特別設定了一些編譯連結選項 09/24 08:57
→ WPC001:try LocalAlloc() / LocalFree 09/24 08:59
推 final01:WIN上heap有很多種 要用WIN API調整一下吧? 09/24 12:34
→ final01:而且有工具可以監看使用記憶體吧 可以分析一下 09/24 12:35