Если iframe находится непосредственно на странице, куда код работает, необходимо быть в состоянии сослаться на него непосредственно:
contentPanel1.Attribute = value;
, Если не (это находится в дочернем элементе управления или MasterPage), Вам будет нужна хорошая идея иерархии страницы... Или используйте метод "в лоб" записи рекурсивной версии FindControl ().
Всем спасибо. Во-первых, я очищаю память, выделенную для вектора цепей внутри деструктора Pop
Pop::~Pop()
{
//nets.clear();
nets.~vector<NN>();
}
. Сообщение об ошибке не говорит много, и я был бы признателен, если бы кто-нибудь показал мне, как заставить MSVC 2008 отображать более подробную информацию. Вот что там написано (я не могу вырезать и вставить его по какой-то причине, поэтому набираю его заново):
Debug assertion failed!
Programm: ... GANN.exe
File: ... dbgedl.cpp
line: 52
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information how ...
Когда я нажимаю кнопку отладки, компилятор показывает мне строку 52 файла dbgdel.cpp:
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
внутри
void operator delete (void * pUserData)
Вот еще часть моего кода, показывающая, что происходит до того, как я попытаюсь выполнить сортировку
double Pop::GA(...)
{
for (int gen=0;gen<ngen;gen++)
{
int istart=0;
if(gen>0) istart=eliteSize;
for(int i=istart;i<popSize;i++)
nets[i].getSSE(in,tgt,ntr,discount);
for(int i=istart;i<popSize;i++)
{
cout << i << " " << nets[i].sse << endl;
}
sort(nets.begin(),nets.end());
Все работает правильно до точки sort (). Указатель lSz используется внутри NN для хранения количества узлов в каждом слое нейронной сети, например lSz [3] = {12,5,1} (12 входов, один скрытый слой с 5 нейронами и один выход). Он используется для создания трехмерного массива весов для каждого подключения к сети. Каждая сеть NN (их 100) внутри Population имеет свой весовой массив. Но у них одинаковые lSz [] и другие структурные параметры, которые, к сожалению, копируются из другого экземпляра NN в другой. Я хотел использовать static для объявления этих общих членов класса, но это предотвратило бы распараллеливание.
Утверждение _BLOCK_TYPE_IS_VALID запускается, когда вы перезаписываете заголовок блока, выделенного новым
. Это происходит, когда вы нарезаете объекты, используете мертвые объекты и т. Д.
Вы должны взглянуть на свой полный код и попытаться работать с данными, которые есть в вашем отладчике. Этот короткий фрагмент кода содержит несколько «любопытных» случаев использования C ++, но не вызывает очевидных моментов, когда это приводит к описанной ошибке (по крайней мере, для меня).
Я только что обнаружил, что если я выполняю конструкцию Pop, подобную этой
Pop::Pop(const int numLayers,const int *lSz,const int AFT,const int OAF,
const double initWtMag,const int numNets,const double alpha)
{
popSize=numNets;
a=alpha;
cout << "defined a\n";
nets.reserve(popSize);
NN *net = new NN (numLayers,lSz,AFT,OAF,initWtMag,0,0);
for(int i=0;i<popSize;i++)
{
//NN *net = new NN (numLayers,lSz,AFT,OAF,initWtMag,0,0);
nets.push_back(*net);
}
}
, то все работает, включая sort (). Но это не работает для меня, потому что теперь вектор сетей содержит тот же экземпляр NN popSize раз. Идея заключалась в том, чтобы инициализировать каждый из этих экземпляров индивидуально. Предполагается, что каждый экземпляр NN имеет свой собственный массив весов, случайным образом инициализированный внутри конструктора NN:
NN::NN(const int numLayers,const int *lSz,const int AFT,const int OAF,const double initWtMag,
const int UEW,const double *extInitWt)
{
// set number of layers and their sizes
nl=numLayers;
ls=new int[nl];
for(int i=0;i<nl;i++) ls[i]=lSz[i];
// set other parameters
aft=AFT;
oaf=OAF;
binMid=0.0;
if(aft==0) binMid=0.5;
// allocate memory for output of each neuron
out = new double*[nl];
for(int i=0;i<nl;i++) out[i]=new double[ls[i]];
// allocate memory for weights (genes)
// w[lr #][neuron # in this lr][input # = neuron # in prev lr]
w = new double**[nl];
for(int i=1;i<nl;i++) w[i]=new double*[ls[i]];
for(int i=1;i<nl;i++) // for each layer except input
for(int j=0;j<ls[i];j++) // for each neuron in current layer
w[i][j]=new double[ls[i-1]+1]; // w[][][ls[]] is bias
// seed and assign random weights (genes)
SYSTEMTIME tStart,tCurr;
GetSystemTime(&tStart);
for(;;)
{
GetSystemTime(&tCurr);
if(tCurr.wMilliseconds!=tStart.wMilliseconds) break;
}
srand(tCurr.wMilliseconds);
int iw=0;
for(int i=1;i<nl;i++) // for each layer except input
for(int j=0;j<ls[i];j++) // for each neuron in current layer
for(int k=0;k<=ls[i-1];k++) // for each input of curr neuron incl bias
if(UEW==0) w[i][j][k]=initWtMag*2.0*(rand()/(double)RAND_MAX-0.5);
else w[i][j][k]=extInitWt[iw++];
}