段错误,这是怎么回事呢?
- C/C++ code
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #define SIZE 1024 void encrypt() { char* file; int pwd; printf("请输入要加密的文件名:"); fflush(stdout); scanf("%s",file); scanf("%*[^\n]"); scanf("%*c"); int fd=open(file,O_RDWR); if(fd==-1) perror("文件不存在"),exit(-1); printf("请输入密码:"); fflush(stdout); scanf("%d",&pwd); scanf("%*[^\n]"); scanf("%*c"); close(fd); }
scanf("%d",&pwd);
scanf("%*[^\n]");
scanf("%*c");
为什么 我在这段后面定义 char buf[SIZE];就会出现段错误呢?
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
[解决办法]
char *file未分配内存。
[解决办法]
[解决办法]
scanf("%s",file);
file这个指针没有分配内存空间就使用了。出现段错误时预料中的事情。
出现段错误 可以通过gdb跟踪
使用方法:
1.gdb 程序名 core文件名
2.where
即可看到程序在什么地方出现的错误
使用上述的前提是在linux环境下并且编译时带-g选项。
当然在widows下可以再IDE下直接查看变量值,更容易发现问题。