易宝付有限公司骗局:C++动态内存分配???

来源:百度文库 编辑:高考问答 时间:2024/05/12 06:22:08
#include <iostream.h>
void main()
{
char *st;
st=new char[12];
strcpy(st,"D:\\download\\mate.txt"); //这有22个字符
cout<<st<<endl;
}
/+??????????????????????????????????????????????????/
st=new char[12];
这里给st分配了多少内存?12个字节吗?
你段代码你运行一下,出错?我发复测验,发现只要分配12以上就OK了,我不知道那个12该怎么称呼?字节呢?还是其它的?

希望了解这一点的,说得详细点....
二楼,有个地方我不知是你对还是我对?希望你求证后,给我答复.

1:
str=new char[12]如果用C语言写的话应该是:str=(char *) malloc(12*sizeof(char));在C语言中,malloc返回的是(void *)所以要强制类型转换;而在C++中返回的是new 后面定义的类型,也就是(char *).所以就不要转换.
2:
这个程序段没有用到特殊字符数组的处理,不要用string.h里的函数也可完成...

当然是12个字节了。不过C语言的指针太灵活了,指针可以指向未分配的内存区域并向其中写入数据,结果执行strcpy(st,"D:\\download\\mate.txt");后,除了st的12个字节被赋值,紧接着st所在内存区域的部分内存块也被写入了值,而这块内存区域是未被分配的,向它写数据就有可能会出错。

是12个字节也就是byte,而且有个地方希望你改一下
st=(char *)new char[12];
c对类型的检查是很严格的
还有就是你这段程序直接copy到编译器里面运行不了
少包一个头文件
string.h
在文件头加入
#include<string.h>
c对内存的应用如楼上所说
而楼主所说的所谓12个以上就成功,这个可能是一种假象吧,毕竟你做的不是趋近于无穷的尝试,不符合统计学规律