我正在尝试编写一个代码,动态地将一个点的坐标写入堆栈,并打印(和释放)它们:
#include <stdio.h>
#include <stdlib.h>
struct point{
float x;
float y;
float z;
}; typedef struct point POINT;
struct stackPoint{
POINT myPoint;
struct stackPoint *next;
}; typedef struct stackPoint STACKPOINT;
static STACKPOINT *stacktop = NULL;
void printStackElement(POINT aPoint){
printf(" x:%f \t y:%f \t z:%f\n", aPoint.x, aPoint.y, aPoint.z );
}
void push(POINT pushPoint){
STACKPOINT *newElem = malloc(sizeof(STACKPOINT));
stacktop = stacktop +1;
newElem->myPoint = pushPoint;
stacktop = newElem;
}
POINT pop(){
POINT b = stacktop->myPoint;
free(stacktop);
stacktop = stacktop -1;
return b;
}
int isEmpty(){
if(stacktop == NULL){
return 1;
}
return 0;
}
POINT readPoint(){
POINT a;
printf("Please enter your x-Coordinate: ");
scanf(" %f", &a.x);
printf("Please enter your y-Coordinate: ");
scanf(" %f", &a.y);
printf("Please enter your z-Coordinate: ");
scanf(" %f", &a.z);
return a;
}
int main(){
char quit = 0;
while(quit !=1 ){
printf("\n\n enter 'p' to enter another Point or 'q' to quit: " );
scanf(" %s", &quit);
switch(quit){
case 'p':
push(readPoint());
break;
case 'q':
quit = 1;
break;
default:
break;
}
}
while(isEmpty() == 0){
printStackElement(pop());
}
}
它打印最后一个条目,但在打印倒数第二个条目之前,只会出现一条错误消息,即“正在释放的指针未分配”。
我试着在没有free()命令的情况下运行它,但是它只打印第一行和0的无穷多行
我还尝试使用 *stackTop指针作为非静态指针,而不是 *newElem指针,但也不起作用。
1条答案
按热度按时间juud5qan1#
它应该是一个链表。我们的教授只是给了我们这个练习,甚至从来没有以任何方式或形式提到过链表。。非常感谢,它现在起作用了!
我将推送功能更改为:
和pop函数,以便: