현재 프로그램에서 큰 문제가 있습니다. 루프 내부에서 다른 함수 호출을하면이 함수가 두 함수가되어 영원히 루프가 발생합니다! printf("bah");
도 영원히 반복 할 수 있습니다.free()가없는 malloc() 호출의 실제 결과는 무엇입니까? 영원히 반복되는 프로그램과 같은 프로그램을 만들 수 있습니까?
이렇게하면 정상적으로 실행됩니다.
//size = 10 (example)
while(size > 0) {
a(); // decrement by 2
b(); // decrement by 2
}
그러나
//size = 10 (example)
while(size > 0) {
a(); // decrement by 2
b(); // decrement by 2
putchar(' ');
}
은 영원히 루프를 지정합니다. 다른 하나는
putchar()
호출입니다.
무언가를 취하는 것은 어렵지만, 무엇이 상상을 초월한 것입니까?
무엇 a() and
B()`기능이 기본적으로 수행
이 배열에서 두 구조체는, 1
및 printf()
회원들의 일부에 의해 size
을 감소 얻을. 이러한 구조는 프로그램 최종 단계에서만 해제되지 않습니다.
나는 (포착 할 수있는) 잡동사니에 대한 아이디어를 얻기 위해이 코드 부분을 게시했습니다. 이 코드 부분의 모든 코드는 정말 큽니다.
편집 :
여기에 최소한의 a()
및 b()
implmentation이야 :
void a(void) {
foo_t* f = top;
while(f->y == STATE_X) {
get(&a); get(&b); /* it's equivalent to pop() in a linked list. size is size=size-1 in each get call() */
printf("%d,%d\n",a->x,ab->x);
f = f->next;
}
top = f;
}
void a(void) {
foo_t* f = top;
while(f->y == STATE_Y) {
get(&a); get(&b); /* it's equivalent to pop() in a linked list. size is size=size-1 in each get call() */
printf("%d,%d\n",a->x,ab->x);
f = f->next;
}
top = f;
}
get()
이 - 내 상황에서 pop()
내 동일합니다.
top
- 마지막부터 struct footype
까지 스택에서 처리.
size
- 현재 스택에있는 요소의 수입니다.
struct footype
도이 링크와 마찬가지로 구현되어 있으며 이전 및 다음 구성원을 가리키는 prev
및 next
이 있습니다.
메모리 누수 ... –
더 많은 코드를 게시해야합니다. – HAL9000
아니요, 메모리가 부족한 경우가 아니라면 ... 코드에 따라 다름) 무한 루프가 발생하지 않습니다. 함수 내에서 뭔가를하고 있습니다 (아마도 "크기"와 같은 실수가없는 한 포인터를 가지고있을 것입니다). 여기에 작은 함수 예제를 작성해보십시오. 아마도 그 점을 잘못 작성했는지 알 수있을 것입니다. 그리고 적절한 답을 줄 충분한 정보를 얻을 것입니다. –