我是靠谱客的博主 热情白开水,最近开发中收集的这篇文章主要介绍申请堆空间时出现的错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct foo{
	int a;	//4
	char b[6];	//8
	char *p;	//4
	char c[0];
};

#define EXPAND_MEM	15

int main()
{
	printf("size =%un",sizeof(struct foo));
	
	struct foo *pf = (struct foo*)malloc(sizeof(struct foo)+EXPAND_MEM*sizeof(int));
<span style="white-space:pre">	</span>/* 之前代码
<span style="white-space:pre">	</span>*<span style="white-space:pre">	</span><span style="font-family: Arial, Helvetica, sans-serif;">struct foo *pf = (struct foo*)malloc(sizeof(struct foo)+EXPAND_MEM);//这样后面赋值的时候就会越界</span><span style="font-family: Arial, Helvetica, sans-serif;">	</span>
<span style="white-space:pre">	</span>*/
	if(!pf){
		printf("there is not enough memory!n");
		exit(EXIT_FAILURE);
	}
	strcpy(pf->b,"hello");
	printf("pf->b :%s,pf :%pn",pf->b,pf);
	
	int i;
	for(i=0;i<EXPAND_MEM;i++){
		*(pf->c +i)=i;
	}
	#if 1
	printf("pf->b :%s,pf :%pn",pf->b,pf);
	printf("pf->c=[");
	for(i=0;i<EXPAND_MEM;i++){
		printf("%d ",*((pf->c)+i));
	}
	printf("]n");
	#endif

	pf->p = (char *)calloc(EXPAND_MEM,sizeof(char));
	if(!(pf->p)){
		printf("there is not enough memory!n");
		exit(EXIT_FAILURE);
	}
	strcpy(pf->p,"I LOVE Linux");
	printf("pf->p %sn",pf->p);

	free(pf->p);
	free(pf);
	return 0;
}


最后

以上就是热情白开水为你收集整理的申请堆空间时出现的错误的全部内容,希望文章能够帮你解决申请堆空间时出现的错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部