2012-03-05 3 views
-4

가능한 중복 :
What is a NullReferenceException in .NET?아래 코드에 어떤 문제가 있습니까?

나는이 오류가

"개체 참조가 개체의 인스턴스로 설정되지 않았습니다."

public class Chromosome 
{ 
    public int[] gen; 

    public void abad(int nn) 
    { 
     gen = new int[nn]; 
    } 

    public int fit; 
} 


public void button1_Click(object sender, EventArgs e) 
{ 
    Chromosome[] chorm; 
    int ab; 

    ab = Convert.ToInt16(txtab.Text); 
    int ehtemal; 

    ehtemal = Convert.ToInt16(txtehtemal.Text); //ehtemal jahesh gen 
    int nokhbe; 

    nokhbe = Convert.ToInt16(txtnokh.Text); 
    int tedad; 

    num = Convert.ToInt16(txtnum.Text); 
    chorm = new Chromosome[tedad + 1]; 
    for (int xx = 0; xx < tedad; xx++) 
     chorm[xx].abad(ab); 
    int ad = tedad; 
    int row = 0 ,col = 0 ; 
} 

for (int z = 0; z < ab; z++) 
    temp.gen[z] = chorm[i].gen[z]; 

에러는 라인 chorm[xx].abad(ab) 마지막 두 라인

답변

0
chorm = new Chromosome[tedad + 1]; 

코드는 상기 배열이 아닌 배열 요소를 초기화한다 일어난다. 당신은 요소를 직접 초기화해야합니다 당신은 내부의 요소를 배열 new Chromosome[tedad + 1]; 초기화,하지만하지 않았기 때문에

for(int i=0;i<chorm.length;i++) 
    chorm[i] = new Chromosome(); 
2

그것입니다. 이 같은 루프 당신을 변경해보십시오 :

for (int xx = 0; xx < tedad; xx++){ 
    chorm[xx] = new Chromosome(); 
    chorm[xx].abad(ab); 
} 

당신은 Chromosome의 생성자가 필요하면 new Chromosome에 어떤 값을 넣어해야 할 수도 있습니다.

+0

감사합니다. –

1

이러한 인스턴스를 먼저 구성하지 않고 chorm[xx] (Chromosome)을 사용하려고 시도했습니다. new Chromosome[tedad + 1]에 의해 반환 된 배열에는 tedad + 1 개체의 공간이 있지만 실제로는 아직 개체가 만들어지지 않았기 때문입니다. 당신은이 배열 항목에서 개최 된 염색체의 메소드를 호출하고

for (int xx = 0; xx < tedad; xx++) 
{ 
    chorm[xx] = new Chromosome(); // add this line 
    chorm[xx].abad(ab); 
} 
0

:

chorm[xx].abad(ab); 

하지만 당신은 염색체와 그 배열 항목을 초기화하지했습니다

는이 작업을 수행합니다. 당신이 검사한다면

chorm[xx] 

당신은 그것이 null이라는 것을 알게 될 것입니다. 배열을 올바르게 초기화하십시오. 즉,이 방법을 실행할 염색체는 어느 것입니까?

0

chorm 배열에 Chromosome의 인스턴스를 추가해야합니다.

for (int xx = 0; xx < tedad; xx++){ 
    Chromosome c = new Chromosome(); 
    c.abad(ab); 
    chorm[xx] = c; 
} 

p.s. 변수 이름을 실제로 볼 수 있습니다!

0

개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 인터페이스에서 일부 텍스트 상자를 사용할 수 없음을 의미합니다. 디버그를 시도하여 오류가 발생한 텍스트 상자를 확인하십시오. u가 int로 변환되는 경우. ur 텍스트 상자가 비어 있지 않고 int 값인지 확인하십시오. 모든 ur int 변수를 초기화해야합니다.

int xxx=0; 
관련 문제