![]() |
||
|
Major Member
![]() 加入日期: Feb 2004 您的住址: 台灣
文章: 174
|
[C語言]小程式出錯,概念的問題--只要迴圈一多就容易出錯
大家晚安!
以下的程式碼只要main裡面的迴圈數一多,就會Access Violation 小弟因為不太熟悉C語言,麻煩各位先進幫忙找出問題給予指導。 先謝謝你們! #define ChromosomeNumber 30 #define GeneNumber 10 int main() { int i; int *CrossoverGene = malloc(sizeof(int)GeneNumber*ChromosomeNumber); int *StartGene= malloc(sizeof(int)GeneNumber*ChromosomeNumber); int *SelectGene= malloc(sizeof(int)GeneNumber); for(i=0;i<5;i++) { Crossover(CrossoverGene, SelectGene, StartGene,ChromosomeNumber); } getchar(); return 0; } void Crossover(int *CrossoverGene, int *SelectGene, int *StartGene, int ChromosomeNumber) { for(count=0;count<GeneNumber;count++) { for(i=0;i<ChromosomeNumber;i++) { *(CrossoverGene+(count*ChromosomeNumber+i))= StartGene[(SelectGene[count]*ChromosomeNumber+i)]; } } }
__________________
左邊的(@) (@) o(≧□≦)o
|
|||||||
|
|
|
Major Member
![]() 加入日期: Oct 2004 您的住址: 台北市
文章: 186
|
StartGene[(SelectGene[count]*ChromosomeNumber+i)];
這行怪怪的,你SelectGene內容值沒初始,乘上ChromosomeNumber有可能會超過邊界 |
||
|
|
|
Advance Member
![]() ![]() 加入日期: Jun 2003 您的住址: Taipei
文章: 442
|
代碼:
*(CrossoverGene+(count*ChromosomeNumber+i))=... 推測存取 CrossoverGene 陣列超出範圍囉~ CrossoverGene 宣告時只有 int * GeneNumber 大小,在 32 位元的機器上,就是 4 * 10 = 40 bytes;但是你在上述這一行程式碼中, CrossoverGene 有可能會存取到 40 bytes 外的空間,當然會有 Access violation 囉!
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
|
|
|