2013-06-04 2 views
-4

malloc을 사용하지 않고이 프로그램을 어떻게 사용할 수 있습니까? 만약 내가 temp.next=&newtemp 오류없이 프로그램 작업을 사용합니까? malloc을 피할 수있는 방법을 배워야합니다.malloc 함수가없는 C의 연결된 목록

for(int ;;){ 
    printf("Fusni N(numrin e qyteteve): "); scanf("%d", &N); 
    if(N<13 || N>100) {printf("Futet N gabim\t(13 < N < 100)\n\n");continue;} 
M=1; 
while(1){ 
p = q = malloc(sizeof(struct node)); 

    p->id_qyteti = 1; 

    for (i = 2; i <= N; ++i) { 
     p->pas = malloc(sizeof(struct node)); 
     p = p->pas; 
     p->id_qyteti = i; 
    } 

    p->pas = q; 
printf("M=%d, Zonat ku nderpritet rryma:\n", M); 

for (count = N; count > 1; --count) { 
printf("%d ",p->pas->id_qyteti); p->pas = p->pas->pas; 
if(count==2)printf("\n\n"); 
     for (i = 0; i < M - 1; ++i) p = p->pas; 
} 
if(p->id_qyteti==13) 

{ 
printf("13.Tirana ngelet e fundit\n"); 
    printf("M-ja minimale: %d\n", M); 
    break; 

} 
else M++; 

}} 
return 0; 
} 
+2

블록 범위 자동 변수의 주소를 반환하지 않으면 UB이거나 프로그램이 실제로 유효합니다. 그러나 나는 정말로 모른다.이 코드는 읽을 수없는 엉망진창이다. –

+0

어떻게 코드를 재구성 할 수 있습니까? – triumfues

답변

2

배열과 함께 사용할 수 있지만 제한된 용량이 문제입니다. 예를 들어, struct yourstruct[500];과 다음에 free struct가 어디에 있는지 나타내는 정수를 가질 수 있습니다. mynode->next = &yourstruct[i++]과 같은 작업을 mallocing하는 경우에는 무료 구조체가 어디에 있는지 알 수있는 더 나은 컨트롤이 있어야합니다.

+0

어떻게 배열과 함께 사용할 수 있습니까? – triumfues

+0

먼저이 작업을 수행해야합니다. node * new = (node ​​*) malloc (sizeof (node)); 하지만 프로그램에 오류가 있다고 말하면서 선언되지 않은 함수 New가 있습니다. – triumfues