使用malloc、calloc函数分配内存空间和存储内容不匹配时引发的错误!
来源:互联网 发布:剑三万花成男捏脸数据 编辑:程序博客网 时间:2024/06/08 14:15
下面是昨天遇到问题的一个简化版本:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>char* copy(char a[]){char *newc=(char *)malloc(sizeof(char));strcpy(newc,a);return newc;}void err(char a[],char b[]){a=copy(a);b=copy(b);int *add=(int *)calloc(4,sizeof(int));//这里会触发断点}int main(){char a[]="222222222222222222222222222222222222222222222222222";char b[]="111111111111111111111111111111111111111111111111111";/*char a[]="-1298749999";char b[]="9999999999999";*/err(a,b);return 0;}原因:先malloc的指针p被分配一个地址,然后如果继续malloc一个q那么就会接着这片内存分配。
不过即使p和q都是1位,都会在p,q之间预留一块空间。导致写入内存的字符串较短的时候不会出现错误。而当溢出的部分足够长时,问题就来了。
假如先malloc的指针p没有预留好足够的空间却被赋一个超出空间的值(例如malloc(4),然后写入很大的字符串,实际上内容保存在内存)。
那么在malloc后面的指针add时,编译器的记录中某片内存是可用的,就分配给了add,但实际上这段空间却被p占用了!
由此可见malloc时size不足绝对是个坏习惯 !而那些字符串函数同样是不安全的!
0 0
- 使用malloc、calloc函数分配内存空间和存储内容不匹配时引发的错误!
- malloc与calloc区别【存储在已分配的内存空间中的值】
- 内存空间分配,以及malloc、calloc、realloc、alloca、realloc的区别
- 内存分配函数malloc和calloc的区别
- 关于内存分配时malloc()和calloc()的区别
- c中内存分配与释放(malloc,realloc,calloc,free)函数内容的整理
- C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
- 内存分配 malloc()和calloc()
- 函数malloc()和calloc()
- malloc()函数和calloc()函数的区别
- malloc函数和calloc函数的区别
- 动态内存分配函数malloc、calloc和realloc
- C语言内存分配函数malloc、calloc和realloc
- malloc和calloc使用
- 函数malloc()和calloc()的区别
- 函数malloc()和calloc()的区别
- malloc(),calloc()和realloc()函数的区别
- 函数malloc()和calloc()的区别
- Java WeakReference的理解与使用
- 如何编译linux 内核
- Android 数据查询query函数参数解析
- Swift 数组和字典
- s3c6410的UART设备驱动(2)
- 使用malloc、calloc函数分配内存空间和存储内容不匹配时引发的错误!
- windows命令行启动服务、停止服务、删除服务
- Eclipse批量操作
- linux下cat命令详解
- Swift 数组和字典
- CImg库编译使用.
- 织梦DedeCMS网站源代码分析详解
- HashSet, HashTable,HashMap区别剖析
- 如何让Footer无论页面长短都在最底部, 并和正文保持固定高度?