C语言程序设计之内存溢出

C语言程序设计之内存溢出

        内存溢出: 程序在运行过程中尝试访问超过其分配内存空间范围的内存区域。内存溢出通常会导致程序崩溃或者出现不可预料的行为。

1 栈溢出

        当函数调用过程中,递归层级过深或者局部变量占用的栈空间过大,超出了栈的内容范围,就会发生栈溢出。

        示例程序

	#include<stdio.h>
	
	void overflow(){
		overflow();
	}
	 
	int main(){
		overflow();
		return 0; 
	}

2 缓冲区溢出

        当向一个固定大小的缓冲区写入超过其容量的数据时,会导致数据溢出到相邻的内存区域,这就是缓冲区溢出。

        示例程序

	#include<stdio.h>
	#include<string.h>
	
	#define N (65536*1024)
	
	int main(){
		char s[N];
		int i;
		memset(s, 'a', N);
		for(i=0; i<N; i++){
			putchar(s[i]);
		}
		puts("");
	
		return 0; 
	}

3 数据溢出

        当使用 malloc 分配内存时,如果分配的内存大小不足以存储实际写入的数据,也会发生数据溢出。
        示例程序

	#include<stdio.h>
	#include<string.h>
	
	int main(){
		char s1[5], s2[] = "Helloworld";
		strcpy(s1, s2);;
		puts(s1);
		puts(s2);
		
		return 0; 
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值