读书人

段异常这是咋回事呢

发布时间: 2012-11-05 09:35:12 作者: rapoo

段错误,这是怎么回事呢?

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未分配内存。
[解决办法]
探讨
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 p……

[解决办法]
scanf("%s",file);
file这个指针没有分配内存空间就使用了。出现段错误时预料中的事情。
出现段错误 可以通过gdb跟踪
使用方法:
1.gdb 程序名 core文件名
2.where
即可看到程序在什么地方出现的错误
使用上述的前提是在linux环境下并且编译时带-g选项。
当然在widows下可以再IDE下直接查看变量值,更容易发现问题。

读书人网 >C语言

热点推荐