高手指教,malloc分配空间的大小问题

EndlessHorizon 2012-09-22 07:59:08
请问各位前辈 malloc函数非配的空间大小是不是一般比指定的要大啊?
请看下面简短的代码:

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

void main()
{
char a[] = "love you !";
char *a1 = (char *)malloc(11);

printf("strlen_a = %d\n",strlen(a));
printf("sizeof_a = %d\n",sizeof(a));
printf("strlen_a1 = %d\n",strlen(a1));
printf("sizeof_a1 = %d\n",sizeof(a1));
}

结果却是:

strlen_a = 10
sizeof_a = 11
strlen_a1 = 22
sizeof_a1 = 4

sizeof_a1 = 4 这个好理解,因为sizeof测试的是指针a1占的内存空间大小 在32位上是 4B

但是strlen为什么是22啊? 在程序当中不是已经指定其为11了吗?(这个11是strlen(a)的值)。
求高手指教!!!!!!
...全文
440 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrampLiu 2014-10-30
  • 打赏
  • 举报
回复 1
strlen 的用法是计算数组所占用大小;char *a1 = (char *)malloc(11) 没有这样的用法; malloc 函数 接收参数是 数据类型; 而11 默认为 int 类型, 所以char *a1 = (char *)malloc(11) 的意思是 指针指向空间大小为 4 的内存块; 那么你没输入数据, 按理说,内存块中就没有东西的(malloc函数 分配的是可用空间,就是没占用的空间);所以输出值应该是 0; 至于不同编译器,输出不同,没实际意义。
AnYidan 2012-09-22
  • 打赏
  • 举报
回复
malloc函数非配的空间大小一般比指定的要大, 原因是对齐和要存储分配空间的大小和标志位

但不是你这样验证的
zhaoming262350 2012-09-22
  • 打赏
  • 举报
回复
malloc()函数 是在内存中动态的分配字节, strlen()返回的是字符数,但是我给malloc()给的参数0-12时
strlen(a1)输出的都是22,13-28时,strlen(a1)输出的是38,malloc()给的参数29-44时,strlen(a1)输出的是54
...,
lslin405 2012-09-22
  • 打赏
  • 举报
回复
strlen(a1)这是计算字符串的大小,从a1的地址开始计算,直到遇到NULL结束符即0为止。
sizeof(a1)计算出来的是a1指针变量占用内存的大小,即4.
建议在网上查一下strlen和sizeof的区别
liutengfeigo 2012-09-22
  • 打赏
  • 举报
回复
大哥们,strlen()是遇见'\0'停止啊.你那里没有置0,啥鸡巴结果都可能啊.
猪头小哥 2012-09-22
  • 打赏
  • 举报
回复
顺便在这里问下,如果malloc的内存没用完,可以吧没用完的free吗?
Binzo 2012-09-22
  • 打赏
  • 举报
回复
The malloc function allocates a memory block of at least size bytes. The block may be larger than size bytes because of space required for alignment and maintenance information.

雷特 2012-09-22
  • 打赏
  • 举报
回复
我的也是strlen(a1)=15; 不知道你用的是什么编译器? 我运行了你的程序,把那个11改成10,strlen(a1)=14; 把那个11成9,strlen(a1)=13, 把11变成0,strlen(a1)=4; 我想应该是它把指针a1的大小也加进去了,也就是总多4B,我也应该是这样的!!
还有我想说的是,用完了malloc,要记得free,用了new,记得delete,否则,内存越来越小!!
还有就是主函数的标准形式是这样的 int main(void){return 0;} 来自 《C primer plus》
不管对你有没有,我把我知道的都告诉你了!
超江 2012-09-22
  • 打赏
  • 举报
回复
等人回答,话说我机器上的strlen(a1)=15

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧