[問題] ofstream,sprintf 在什麼樣的狀態下會當掉
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++2010
問題(Question):
很抱歉我的問題難以描述,連除錯都莫名其妙
但是目前已經鎖定一些問題點,以下是原來會出錯的部分
std::ofstream fout;
fout.open(filename);
for (int i=0; i<n; i++) {
fout << data[i];
}
fout.close();
基本上就只是這樣的東西而已
但不曉得為什麼,於何種條件會觸發也未知 (只能確定並非隨機)
fout << data[i]; 的這一行在特定時機會莫名其妙造成程式中斷
不過只要在前面多一行 cout 就化解了,至少程式可以跑完了
std::ofstream fout;
fout.open(filename);
for (int i=0; i<n; i++) {
std::cout << "\0"; // 多一行這樣的東西即可"繞過"問題
fout << data[i];
}
fout.close();
實在完全沒有頭緒要如何除錯?
類似的狀況還有,在某些情況下即便是這麼簡單的程式碼也會當掉:
sprintf(str,"%.3f",data[i]);
但是前面多一行 std::cout << "\0"; 就又化解掉了!
這實在太奇怪,一定有什麼問題沒注意到才是
我認定 data[i] 這個陣列應該沒有問題
而且 data[i] 一定有數據 (不太可能是未正確初始化),也不可能無法存取 data[i]
況且就算遇到了 NaN 的數據,sprintf 或者 ofstream 仍然都可以處理
很想知道可能是什麼樣的問題?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.255.50.171
→
01/09 06:06, , 1F
01/09 06:06, 1F
→
01/09 07:22, , 2F
01/09 07:22, 2F
推
01/09 08:03, , 3F
01/09 08:03, 3F
→
01/09 13:34, , 4F
01/09 13:34, 4F
debugger的提示是存取到不合法的區塊,但詳情我實在看不懂,無法在這裡提供出來
→
01/09 16:37, , 5F
01/09 16:37, 5F
→
01/09 16:42, , 6F
01/09 16:42, 6F
NUM = n
cout << data[i] 也完全沒有問題!
因為還有其他的 function (在這些問題程式碼之前)
會把 data 中所有的資料全部拿來用
除了結果是完全正確以外,也沒有發現任何 NaN、或者未定義數值的影響。
我現在懷疑另一個問題:
假如其他的變數存取,ex: facet[] 另一個 double array
不小心存取到了範圍外的位置,比如 facet[-1],是否有機會造成這種問題?
但我可以確定的是 facet[-1] 怎麼樣也無法觸及 data[] 任何元素的位置。
換句話說,目前可以保證的是:
data 這個 double array 裏頭的資料,自始至終沒有被「外力」不正常影響過。
※ 編輯: logs 來自: 111.255.48.236 (01/09 18:07)
推
01/09 18:25, , 7F
01/09 18:25, 7F
→
01/09 18:26, , 8F
01/09 18:26, 8F
→
01/10 12:26, , 9F
01/10 12:26, 9F
→
01/10 12:26, , 10F
01/10 12:26, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章