奇怪的core

#include<sys/stat.h>
#include<stdio.h>

int
main(int argc, char *argv[])
{
    struct stat *buf;
    for (int i = 1;i<argc;i++) {
        lstat(argv[i], buf);
        mode_t fm = buf->st_mode;// @tag

        const char* filename = argv[i];// !important

        if (S_ISREG(fm)) 
            printf("%s: is regular\n", argv[i]);
        else if (S_ISDIR(fm))
            printf("%s: is directory\n", argv[i]);
        else if (S_ISCHR(fm))
            printf("%s: is character special file\n", argv[i]);
        else if (S_ISBLK(fm))
            printf("%s: is block special file\n", argv[i]);
        else if (S_ISLNK(fm))
            printf("%s: is link file\n", argv[i]);
        else if (S_ISSOCK(fm))
            printf("%s: is sock file\n", argv[i]);
        else    
            printf("%s: unknown type\n", argv[i]);
    }   
}

这段代码是可以顺利跑通的, 但是注意到 !important 那一行, 如果删除这一行, 程序会core

gdb调试结果, 在执行完@tag 这一行之后, 如果后面没有 !important , 则argv数组的内容就没了, 如果有 !important, 则argv数组正常, 这是什么情况? 求解.

阅读 3.4k
1 个回答

楼主,即使你有没有@tag 这一行 或是 !important 这行,都不行吧。因为你没有给buf分配空间,然后你就调用了lstat函数。你先给buf一个malloc动作,就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进