У меня есть функция вывода, которая записывает некоторые параметры в файл с циклом. Я вызываю функцию несколько раз, прежде чем она падает, и она функционирует должным образом. Цикл возвращает количество раз, указанное в параметре «count». Когда счетчик равен 6000, он падает на 5960. Функция не дает сбой при предыдущих вызовах, которые передают функцию более низкому счету.
Ошибка отсылает меня к tidtable.c и указывает на строки:
_CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()
{
#ifdef _M_IX86
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE; // <---exactly Here
if (!flsGetValue)
{
flsGetValue = DecodePointer(gpFlsGetValue);
TlsSetValue(__getvalueindex, flsGetValue);
}
return flsGetValue;
Я инициализирую единственный динамически назначенный параметр pntr в функции, используя следующий шаблон:
template <typename T>
T *AllocateDynamicVector(int nRows){
T *dynamicArray;
dynamicArray = new T[nRows];
for( int i = 0 ; i < nRows ; i++ ){
dynamicArray[i]= 0;
}
return dynamicArray;
}
Инициализация от основной:
int* pntrPlane = AllocateDynamicVector<int>(2*numberOfCells);
Writer(myfile,ss,"123","0","0","1","0","0","0","1","0",2*numberOfCells,lineInfo,1,pntrPlane);
Код указан ниже:
void Writer (ofstream &myfile, stringstream &ss, std::string type, std::string id1, std::string id2, std::string id3,
std::string id4,std::string id5,std::string id6,std::string id7,std::string id8, int count,
int lineInfo[2], int lineNum, int* pntr){
if(myfile.is_open()){
for (int i=0; i < count; i++){
if (type == "123"){
cout<<"I'm here!"<<" "<<i<<endl;
}
ss.seekp(0);
ss<<setw(80)<<lineInfo[0]; ss.seekp(0);
ss<<setw(73)<<"1D"; ss.seekp(0);
ss<<setw(56)<<id1.c_str(); ss.seekp(0);
ss<<setw(48)<<id2.c_str(); ss.seekp(0);
ss<<setw(40)<<id3.c_str(); ss.seekp(0);
ss<<setw(32)<<id4.c_str(); ss.seekp(0);
ss<<setw(24)<<id5.c_str(); ss.seekp(0);
ss<<setw(16)<<lineInfo[1]; ss.seekp(0);
ss<<setw(8)<<type.c_str(); ss.seekp(0);
myfile<<ss.str()<<endl; ss.clear();
pntr[i] = lineInfo[0];
lineInfo[0]++;
ss.seekp(0);
ss<<setw(80)<<lineInfo[0]; ss.seekp(0);
ss<<setw(73)<<"0D"; ss.seekp(0);
ss<<setw(40)<<id6.c_str(); ss.seekp(0);
ss<<setw(32)<<lineNum; ss.seekp(0);
ss<<setw(24)<<id8.c_str(); ss.seekp(0);
ss<<setw(16)<<"0"; ss.seekp(0);
ss<<setw(8)<<type.c_str(); ss.seekp(0);
myfile<<ss.str()<<endl; ss.clear();
lineInfo[0]++;
lineInfo[1] = lineInfo[1] + lineNum;
}
}
}
Как мне избежать этой проблемы ??
Примечание. Если запустить программу без отладки, ошибка исчезнет.
Редактировать: подробное описание проблемы: я генерирую выходной файл, используя функцию выше несколько раз. Я посылаю параметры в функцию, включая динамический целочисленный вектор, и записываю число в нее на каждой итерации. При выполнении этой функции с набором параметров выдается ошибка повреждения кучи «Обнаружена критическая ошибка c0000374». Странно то, что это не дает ошибок в других случаях.