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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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));
复制代码
1
<span style="white-space:pre"> </span>/* 之前代码
复制代码
1
<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>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<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; }


最后

以上就是热情白开水最近收集整理的关于申请堆空间时出现的错误的全部内容,更多相关申请堆空间时出现内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部