2012-02-16 50 views
0

我不同意這種情況下明白了,但這對我來說真的很重要,請大家幫我...混淆「訪問衝突」

void __fastcall TForm1::Button4Click(TObject *Sender) 
{ 
    String masuk, keluar, kosong; 
    int i, x, j, n = 0; 

    masuk = Edit2->Text; 
    keluar = masuk; 
    kosong = " "; 
    n = 0; 
    x = 0; 

mulai: 
    i = 1; 
    j = 0; 
    j = j + n; 
    i = i + j; 
    if (masuk[i] == 'a') 
    { 
     keluar[i] = 't'; 
    } 
    else if (masuk[i] == 't') 
    { 
     keluar[i] = 'a'; 
    } 
    else if (masuk[i] == 'c') 
    { 
     keluar[i] = 'g'; 
    } 
    else if (masuk[i] == 'g') 
    { 
     keluar[i] = 'c'; 
    } 
    else 
    { 
     Application->MessageBoxA("Masukan Anda Salah", "Peringatan", MB_OK | MB_ICONWARNING); 
     keluar = kosong; 
     goto end; 
    } 
    n = n + 1; 
    if (i < 10) 
     goto mulai; 
    else 
     goto end; 

end: 
    Memo1->Text = keluar; 
} 

,如果我做masukan超過10(我< 10 (10作爲默認值)),但是如果它小於10,它會使消息異常類EAccessViolation ..

+1

爲什麼'goto's而不是一個適當的循環? – 2012-02-16 21:31:55

+0

訪問衝突通常意味着您嘗試訪問當前內存塊不可用的內存,即您超出了數組的範圍(字符串)。另外,不要使用goto。 – MGZero 2012-02-16 21:31:57

+1

看起來像DNA/RNA相關的東西。我假設a,t,g,c是腺苷,鳥嘌呤,胸腺嘧啶和胞嘧啶。 – 2012-02-16 21:40:21

回答

1

在黑暗中拍攝,但我認爲你實際上想要做的可能是是這個。我假設你正在拍攝代表基因組一半的10個字符的單個字符串,並且您正在生成另一個字符串值對。

void __fastcall TForm1::Button4Click(TObject *Sender) 
{ 
    String masuk, keluar; 
    masuk = Edit2->Text; 
    keluar = masuk; 

    char kosong = ' '; 

    for (int i=0; i < 10; i++) 
    { 
    switch(masuk[i]) { 
     case 'a': 
     keluar[i] = 't'; 
     break; 
     case 't': 
     keluar[i] = 'a'; 
     break; 
     case 'c': 
     keluar[i] = 'g'; 
     break; 
     case 'g': 
     keluar[i] = 'c'; 
     break; 
     default: 
     Application->MessageBoxA("Masukan Anda Salah", "Peringatan", MB_OK | MB_ICONWARNING); 
     keluar[i] = kosong; 
     break; 
    } 
    Memo1->Text = keluar; 
} 
+0

我曾嘗試過這種方式,但我的proggram無法讀取循環..當我爲(int i = 0;我<10; i ++) ,我的程序顯示AccessViolation。 這就是爲什麼我使用「goto」.. – 2012-02-18 10:16:14