背景导入

微信截图_20180428165124.png

是否有过这样的经历的,当你兴致满满的编译好你的C文件后,运行的时候却出现了这样子的惨痛经历。下面,我将总结几种出现这种问题的原因。

栈区过大

# include "stdio.h"

int main(){

int MB[209715200000];

printf("allocate the memory successfully!");

return 0;

}

当然,为了效果明显,我们故意将只分配弄得特别大,所以这里,我们运行一下可以看到:

$gcc -o main *.c

$main

timeout: the monitored command dumped core

sh: line 1: 72469 Segmentation fault timeout 10s main

错误地址访问

指针偏移

# include "stdio.h"

int main(){

int x;

scanf("%d", x);

printf("运行完成.");

}

结果也是你输入值之后就提示

微信截图_20180428165124.png

#include "time.h"

#include "stdio.h"

#include "string.h"

char *asctime2(const struct tm *timer){

const char wday_name[7][3] = {

"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"

};

const char mon_name[12][3] = {

"Jan", "Feb", "Mar", "Apr", "May", "Jun",

"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"

};

static char result[50]; // 用于储存字符串的空间是静态空间

// this is a wrong vison which can cause the program to stop accidently

sprintf(result, "%.3s %.3s %02d %02d:%02d:%02d %4d",

wday_name[timer->tm_wday],

mon_name[timer->tm_mon,

timer->tm_mday,

timer->tm_hour,

timer->tm_min,

timer->tm_sec,

timer->tm_year + 1900]);

return result;

}

int main(){

time_t current;

time(&current);

struct tm *timer;

timer = localtime(&current);

char x[100];

strcpy(x, asctime2(timer));

printf("%s\n", x);

return 0;

}

上面这段程序,同样也会报错,而我们认真观察可以看到,在sprintf()的参数中,我们由于码字的时候,把]的位置直接放在了最后面,但这里,编译器并不会报错,而是任其肆意妄为。

而正确的代码应该如下:

sprintf(result, "%.3s %.3s %02d %02d:%02d:%02d %4d",

wday_name[timer->tm_wday],

mon_name[timer->tm_mon],

timer->tm_mday,

timer->tm_hour,

timer->tm_min,

timer->tm_sec,

timer->tm_year + 1900);

指针未初始化就使用了

#include

#include

#define STACK_INIT_SIZE 100

#define SINCREASEMENT 10

typedef int ElemType;

typedef struct stack

{

ElemType *base;

ElemType *top;

int stack_size;

}stack, *ListStack;

void init(ListStack S){

// 分配空间

printf("3\n");

S -> base = malloc(STACK_INIT_SIZE*sizeof(ElemType));

printf("2\n");

if (!S->base){

exit(1); // 分配空间失败

}

printf("1\n");

S -> top = S -> base;

S -> stack_size = STACK_INIT_SIZE;

}

int main(){

ListStack Lstack; // 这里的指针是野指针,指向哪里谁也不知道,所以运行时会报错

init(Lstack);

return 0;

}

这里main函数应该写作

int main(){

stack Lstack;

init(&Lstack);

return 0;

}

数据类型不符合

这种情况下就是和第二种情况类似了。

c语言编写的程序停止运行程序,C语言中,编译成功但运行停止的几个原因相关推荐

  1. c语言程序命令行,ttyd(C语言编写的命令行程序) v1.3.1 免费版

    ttyd是一个C语言编写的命令行程序,可以把任意命令行程序分享到网页上操作,可以看做是个网页版的远程终端,支持 Linux.macOS 系统,还可以运行在 OpenWrt 之类的嵌入式系统上. 功能特 ...

  2. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h>   void main(void)   {    EA=1;      //开放总中断 ...

  3. C语言编程编制职工档案管理程序,C语言 编写一个职工档案程序.doc

    C语言 编写一个职工档案程序 一.实验项目: 实验6 课程设计 (时间安排:6课时) 二.实验内容: 编写一个职工档案程序,设计实现如下功能: 建立一个职工数据结构,结构包含姓名.序号.性别和年龄信息 ...

  4. 单片机c语言程序编写步骤,用c语言编写单片机流水灯程序详解

    用C语言编写的流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口, ...

  5. 如何用c语言编写炫酷烟花程序,C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include #include //图形界面库头文件 #include // ...

  6. 利用C语言编写放烟花的程序(同时也可以播放音乐)

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐) 代码如下 #pragma once #include<stdio.h> #include<graphics.h> // ...

  7. 利用C语言编写放烟花的程序(春节专用)

    利用C语言编写放烟花的程序(春节专用) #pragma once #include<stdio.h> #include<graphics.h> //图形界面库头文件 #incl ...

  8. c语言程序编译成功运行失败,为什么这个程序编译成功但运行失败?

    为什么这个程序编译成功但运行失败? 可以编译,就是运行失败.请问哪里出问题了. 所示的程序在屏幕上打印函数F(y)=e-y*sin(2πy)的曲线. #include #include #define ...

  9. 39种语言编写的Hello World程序

    Hello World程序 维基百科,自由的百科全书 Hello, World!程序是一个只在计算机屏幕上打印出"Hello, World!"(英语,意为"你好,世界!& ...

最新文章

  1. SQLServer性能优化之查询提示
  2. 2020亚太杯数学建模_比赛 | 2020年APMCM亚太地区大学生数学建模竞赛
  3. MongoDB 语法陷阱(转自51CTO)
  4. 2013全球移动游戏产业白皮书
  5. 《让僵冷的翅膀飞起来》系列之五——从容自若的CTO
  6. js几个页面生成pdf 然后批量打印_太好用了!这款免费PDF工具能够满足你的各种需求...
  7. [Java] 蓝桥杯ALGO-120 算法训练 学做菜
  8. VMworld 2016 US带来了哪些惊喜?
  9. Openresty 学习笔记(三)扩展库之neturl
  10. 你想要的宏基因组-微生物组知识全在这(2020.8)
  11. windows 网卡驱动安装
  12. 一种基于折射反向学习机制与自适应控制因子的改进樽海鞘群算法
  13. Excel计算函数(计算机二级)
  14. 大数据小项目之电视收视率企业项目07
  15. html怎么调整成苹方,CSS 苹方字体
  16. 香港城大:首创3D打印磁控微型机器人技术,推动人体送药研究发展
  17. 十本Android开发学习书籍下载链接
  18. 手机 9006 端口 不断的闪掉
  19. matlab二维图像重采样,使用网格插值对图像重采样
  20. 【点云处理之论文狂读前沿版6】Surface Representation for Point Clouds

热门文章

  1. Linux疑难杂症解决方案100篇(十二)-ubuntu中安装ftp服务器
  2. LeetCode题组:第322题-零钱兑换
  3. Cracer渗透视频课程学习笔记——基础知识(1)
  4. 使用libsvm对MNIST数据集进行实验
  5. neuroph轻量级神经网络框架
  6. Java NIO——Selector机制源码分析---转
  7. CSRF 攻击的应对之道--转
  8. 中国平安:杀进智能合约,你怕不怕?
  9. 那些你踩过的币圈投资陷阱(下)
  10. 今日头条成功的核心技术秘诀是什么?深度解密个性化资讯推荐技术 本文作者:AI研习社 2017-07-05 12:24 导语:从“内行”的角度解密个性化资讯推荐技术。 雷锋网按:本文系知名 IT 技术资