作者LinRungChuan (吉他手)
看板C_and_CPP
標題[問題] random_shuffle的使用
時間Fri Mar 5 13:26:38 2010
遇到的問題: (題意請描述清楚)
Population[0]未做random_shuffle前,被random_shuffle了
希望得到的正確結果:
哪邊的寫法導致這問題
程式跑出來的錯誤結果:
無
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
vc++
有問題的code: (請善用置底文標色功能)
int PopulationNum = 10, GeneNum = 12;
int **Population = new int *[PopulationNum];
for(int i=0 ; i<PopulationNum ; i++)
Population[i] = new int[GeneNum];
int Chromosome[] = {1,6,100,2,5,200,3,4,300,7,8,9};
Population[0] = Chromosome;
for(int i=1 ; i<PopulationNum ; i++)
{
random_shuffle(&Chromosome[0],&Chromosome[GeneNum-1]);
for(int j=0 ; j<GeneNum ; j++)
{
Population[i][j] = Chromosome[j];
}
}
補充說明:
如果random_shuffle拿掉,
Population[0]就可以正常={1,6,100,2,5,200,3,4,300,7,8,9};
但是一放上去Population[0]就先做了random_shuffle
但是如果用for先把{1,6,100,2,5,200,3,4,300,7,8,9}給Population[0][...]
那就又正常~~~不知道差別在哪邊 感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 161.130.178.128
推 LPH66:因為你並不是把 Chromosome 的值給複製過去 03/05 13:32
→ LPH66:而只是把 Population[0] 這個位置的指標指過去而已 03/05 13:32
→ LPH66:這順帶造成了一個 memory leak 03/05 13:32
→ LinRungChuan:感謝,不過memory leak的部分不太懂~能順便指導一下嗎 03/05 14:08
推 stilltin:原先 Population[0]的值被蓋掉了,再也不能free了 03/05 14:09
→ LinRungChuan:那我後面如果delete..刪掉的記憶體是!!!@@~~~ 03/05 14:43
→ tinlans:光看標題我還以為是忘記 call srand(),以前有人這樣... 03/05 15:02