아래 링크 된 목록을 만든 다음 삭제하려고 시도하지만 프로그램이 컴파일되고 실행되지만 링크 된 목록은 나를 위해 삭제되지 않고 프로그램이 루프 등으로 멈추게됩니다 (기본적으로 수동으로 죽여야 만 할 때 종료되지 않습니다)C에서 연결된 목록 삭제
누구나 내가 'deletePoly'함수를 작성하기 전에 잘못 가고 있다고 제안 할 수 있습니까? (예 : 프로그램이 컴파일되어 실행될 수 있음) 괜찮아 지지만 100 회 대구를 통과했는데 문제가 무엇인지 알 수없는 것 같습니다. 여기
내 코드입니다 :#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MEMORY_SIZE (15)
typedef struct link {
double coeff;
int pow;
struct link * next;
} poly;
poly *polyArray[MEMORY_SIZE];// array of 15 polynomials to play with
// /** The function prototypes */
void createPoly(poly **);
void showPoly(poly *);
void deletePoly(poly *);
int main(void) {
int a;
for(a = 0; a < MEMORY_SIZE; a++)
{
polyArray[a] = NULL;//Initialise each element of the array of pointers to NULL
}//end for
createPoly(&polyArray[0]);
showPoly(polyArray[0]);
srand(time(NULL));
createPoly(&polyArray[1]);
showPoly(polyArray[1]);
showPoly(polyArray[0]);
int count;
for(count = 0; count < MEMORY_SIZE; count++)
{
deletePoly(polyArray[count]);
}
showPoly(polyArray[0]);
return 0;
}// End Main Function
//////////////////////////////////////////////////////////////////////////////////////
void createPoly(poly **node) {
poly *tempnode; //To hold the temporary last address
tempnode = (poly*)malloc(sizeof(poly)); //create the first node
*node = tempnode; //Store the head address to the reference variable
int flag = 1 + rand()%3;; // A flag to control the number of terms
int counter;
for(counter = 0; counter <= flag; counter++)
{
tempnode->pow = (flag-counter);
tempnode->coeff = ((double)(rand()%20))/((double)(1 + rand()%20));
if((counter < flag) && (counter >= 0) )
{
tempnode->next = (poly*)malloc(sizeof(poly)); //Grow the list
}
else if (counter == flag)
{
tempnode->next = NULL;
}
tempnode = tempnode->next;
}
}//end function createPoly
void deletePoly(poly *node) {
poly *temp;//Create pointer to poly called 'temp'
while(node->next != NULL);
{
temp = node->next;//Assign the address of the next node to 'temp'
free(node);//Delete the current node
node = temp;//Assign the address of the next node in the list to 'node'
}//end while
node = NULL;//Set pointer 'node' to NULL to prevent a "lingering" pointer
}//end function 'deletePoly'
void showPoly(poly * node) {
while(node->next != NULL) {
if(node->coeff == 0)
{
node = node->next;
}
else if(node->coeff == 1 && node->pow > 1)
{
printf("[x^%i]", node->pow);
node = node->next;
}
else if(node->coeff == 1 && node->pow == 1)
{
printf("[x]");
node = node->next;
}
else if(node->coeff != 0 && node->pow == 0)
{
printf("(%.2lf)", node->coeff);
node = node->next;
}
else if(node->pow == 0 && node->coeff == 0)
{
node = node->next;
}
else if(node->coeff != 1 && node->pow > 1 && node->coeff != 0)
{
printf("(%.2lf)[x^%i]", node->coeff, node->pow);
node = node->next;
}
else if(node->coeff != 1 && node->pow == 1 && node->coeff != 0)
{
printf("(%.2lf)[x]", node->coeff);// no need to print x to the power 0
node = node->next;
}
if(node->next != NULL)
{
printf(" + ");
}
}
}//end function showPoly
'동안 (! 노드 -> 다음 = NULL);'->'동안 (노드 = NULL)'과'node = NULL'는 아무 효과가 없습니다. – BLUEPIXY