[英]Switch case statement doesn't loop
它所做的只是运行功能,但由于某种原因,在我按下r
后它并没有中断,它只是运行 function 然后结束程序。
int main()
{
char key = 0;
PPMImage *img = NULL;
do {
puts("\tPress r to read in an image in ppm format");
puts("\tPress s to save image in ppm format");
puts("\tPress q to quit");
scanf(" %c", &key);
clear_to_end(stdin);
switch (key) {
case 'r':
load_file("fname");
free(img->data);
break;
case 's':
save_file(img);
break;
case 'q':
puts("\tTerminating program...");
break;
default:
puts("\tInvalid Input");
break;
}
} while (key != 'q');
}
程序退出的原因是它具有未定义的行为:
load_file("fname");
可以加载图片文件,但是对img
没有副作用free(img->data);
取消引用 null 指针img
,导致分段错误和程序终止。 假设load_file
返回指向PPMImage
的指针,并且您的意图是释放先前读取的图像,请将代码更改为:
case 'r':
if (img) {
// free the previous image
// write a function to free what was allocated
free_file(img);
}
img = load_file("fname");
break;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.