看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 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