繁体   English   中英

switch case语句不循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM