![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - [C語言]小程式出錯,概念的問題--只要迴圈一多就容易出錯
(https://www.pcdvd.com.tw/showthread.php?t=708768)
|
|---|
[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)]; } } } |
StartGene[(SelectGene[count]*ChromosomeNumber+i)];
這行怪怪的,你SelectGene內容值沒初始,乘上ChromosomeNumber有可能會超過邊界 |
代碼:
*(CrossoverGene+(count*ChromosomeNumber+i))=... 推測存取 CrossoverGene 陣列超出範圍囉~ CrossoverGene 宣告時只有 int * GeneNumber 大小,在 32 位元的機器上,就是 4 * 10 = 40 bytes;但是你在上述這一行程式碼中, CrossoverGene 有可能會存取到 40 bytes 外的空間,當然會有 Access violation 囉! |
| 所有的時間均為GMT +8。 現在的時間是12:02 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。