我有一個像陣列雙打和堆損壞
template <class Type>
myFunc(Type** arrayToBeFilled);
函數我這樣稱呼它:
double* array = NULL;
myFunc(&array);
我做一些閱讀和分析數字與strtod轉換函數的函數裏面:
//打開文件,獲取每行的行數和雙打數
...
char *inputString = new char[LONG_STRING_SIZE];
char *pNext = NULL;
(*arrayToBeFilled) = new Type[length*rowSize];
for (int i=0; i<length; i++)
{
source.getline(inputString, LONG_STRING_SIZE);
pNext = NULL;
for (int j=0; j<rowSize; j++)
{
double d = strtod(inputString, &pNext);
(*arrayToBeFilled)[i*rowSize+j] = d;
inputString = pNext;
pNext = NULL;
}
}
變量d只是用於調試器的檢查 - 而且它在運行時很好。 但是填充數組後,我嘗試打印它(只是爲了檢查)
for (int i=0; i<length; i++)
{
for (int j=0; j<rowSize; j++)
{
cout<<(*arrayToBeFilled)[i*rowSize+j]<<" ";
}
cout<<"\n";
}
這裏來壞輸出 - 其他號碼,有時堆腐敗等。我正在打印和退出該功能 - 相同的結果。而且我不能刪除這個數組,否則都不會出現這個函數 - 運行時錯誤跟着我!
您發佈的代碼看起來不錯 - 問題可能出現在您未發佈的代碼中。你能發佈一個完整的例子來產生錯誤嗎? – HighCommander4
不應該是我*長度(因爲你正在迭代長度)+ j? –
@KamilKlimek:沒有。考慮'i'作爲跳過的行數以到達當前行的開始位置。因此,跳過的*元素*的數量是'i * rowSize'。 – HighCommander4