您的位置:首页 > 编程语言 > C语言/C++

由strcpy函数引起的C语言动态申请内存的问题

2011-08-04 20:51 363 查看
大二上学期,曾写过这样的一段代码



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

int main()
{
    char *ptr1 = "hello string";
    char *ptr2 = (char*)malloc(strlen(ptr1)-2);

    strcpy(ptr2,ptr1);

    while(*ptr2 != '\0')
    printf("%c",*ptr2++);

    return 0;
}
就是利用malloc函数申请了比str1的少空间,然后将str1拷贝到这个空间里,发现最后可以完整的打印出helllo world来,难道申请的内存不仅仅有strlen(ptr1)-2吗

一位朋友这样说的

“其实这种情况是正常的(当然做法是不可取的)..找点资料可以看下内存的最小block, 也就是说内存有一个最小块, 不管你申请得多小,也会是这么大的.这样是为了加快寻址.

就比如,你malloc出来的地址永远是偶数的不会是奇数(当然,前提是偶地址寻址方式).

只是个人的理解,可以参考字节对齐.”

我感觉很有道理,后来我进行了测试,只申请6个字符大小的空间,然后把一个很长的字符串付给str1 ,使得这个字符串的大小一定超过那个所谓的内存最小块,结果很好,果然出现了异常~

这不仅引发了思考,就是效率问题,忘记那本书上说的了,就是double和float之间最好选择double,应为二者的效率几乎是一样的,但是double的精度却比float好的多。

那我们是不是也可以申请最小一块的内存呢?求朋友们的指点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: