[問題] random_shuffle的使用

看板C_and_CPP作者 (吉他手)時間15年前 (2010/03/05 13:26), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 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

03/05 13:32, , 1F
因為你並不是把 Chromosome 的值給複製過去
03/05 13:32, 1F

03/05 13:32, , 2F
而只是把 Population[0] 這個位置的指標指過去而已
03/05 13:32, 2F

03/05 13:32, , 3F
這順帶造成了一個 memory leak
03/05 13:32, 3F

03/05 14:08, , 4F
感謝,不過memory leak的部分不太懂~能順便指導一下嗎
03/05 14:08, 4F

03/05 14:09, , 5F
原先 Population[0]的值被蓋掉了,再也不能free了
03/05 14:09, 5F

03/05 14:43, , 6F
那我後面如果delete..刪掉的記憶體是!!!@@~~~
03/05 14:43, 6F

03/05 15:02, , 7F
光看標題我還以為是忘記 call srand(),以前有人這樣...
03/05 15:02, 7F
文章代碼(AID): #1Ba9OKyZ (C_and_CPP)