PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
hbkqoo
Major Member
 
hbkqoo的大頭照
 

加入日期: 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
舊 2007-04-04, 12:44 AM #1
回應時引用此文章
hbkqoo離線中  
ouchman
Major Member
 

加入日期: Oct 2004
您的住址: 台北市
文章: 186
StartGene[(SelectGene[count]*ChromosomeNumber+i)];

這行怪怪的,你SelectGene內容值沒初始,乘上ChromosomeNumber有可能會超過邊界
 
舊 2007-04-04, 03:21 AM #2
回應時引用此文章
ouchman離線中  
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
代碼:
 *(CrossoverGene+(count*ChromosomeNumber+i))=...


推測存取 CrossoverGene 陣列超出範圍囉~

CrossoverGene 宣告時只有 int * GeneNumber 大小,在 32 位元的機器上,就是 4 * 10 = 40 bytes;但是你在上述這一行程式碼中, CrossoverGene 有可能會存取到 40 bytes 外的空間,當然會有 Access violation 囉!
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
舊 2007-04-04, 10:09 AM #3
回應時引用此文章
harrisonlin離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是10:43 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。