2017-03-08 11 views
-4

넷 무효 포인터는 다음 코드는 에러를 발생realloc을() 다음으로 realloc 문제를 일으키는</p> <blockquote> <p>realloc(): invalid pointer</p> </blockquote> <p>가 액세스 될 때마다 상기 제공 : C

typedef struct net{ 
    int numele; 
    struct net **e; 
} net; 

포함하는 구조이며 위의 오류. 나는 왜 그런지 이해하지 못한다. 코드의이 부분에 문제가 없다고 생각되면 전체 코드가 800 줄이므로 여기에 게시 할 수 있다고 생각하지 않습니다.

void add(net *n, net *ne) { 
    if(n->numele==0) { 
     n->e = (net **)malloc(sizeof(net *)); 
     n->e[0] = ne; 
     n->numele = 1; 
    } else { 
     n->e = (net **)realloc(n->e, (1 + n->numele)*sizeof(net *)); 
     n->e[n->numele] = ne; 
     n->numele = n->numele + 1; 
    } 
} 

모기장 nne 이미 코드에서 다른 곳 초기화됩니다, 그래서 당신은 null가되지 않을 것이라고 가정 할 수있다.

+2

['malloc()'의 반환 값과'C'의 패밀리를 형 변환하지 않는 이유에 대한이 토론을 참조하십시오.] (http://stackoverflow.com/q/605845/2173917). –

+2

[___MCVE___] (http://stackoverflow.com/help/mcve)를 만드시겠습니까? –

+2

@SouravGhosh - 언젠가는 '[mcve]'가 [mcve]로 확장 된 마크 업을 입력하면 멋진 의견을 알게되었습니다. – StoryTeller

답변

0

코드는 realloc() 인 것으로 보입니다. 그러나 add()의 첫 번째 호출에서 net *n이 제대로 초기화되지 않은 경우, 즉 numele != 0 && e != NULL입니다. 이 경우 e에는 일부 정크 값이있을 수 있으며 realloc()은 잘못된 주소로 시도합니다. 그래서 그 오류가 발생할 수 있습니다.