内存分配练习
Memory allocation excercise
编写一个程序,要求用户输入浮点数据的总数。然后使用calloc()和malloc()函数分配两个内存块由数字指定的相同大小,并打印出两个mem的初始值-层砌块。
我的解决方案是:
float *p_1,*p_2;
int i,num_of_floats=0;
printf("the total number of float numbers: ");
scanf("%d",&num_of_floats);
if((p_1=calloc(num_of_floats,sizeof(float)))==NULL||(p_2=malloc(num_of_floats*sizeof(float)))==NULL){
printf("error at alllocating!!n");
exit(1);
}
else{
for(i=0; i<num_of_floats ;i++){
printf("%f",*(p_1+i));
}
printf("n");
for(i=0; i<num_of_floats ;i++){
printf("%f",*(p_2+i));
}
}
free(p_1);
free(p_2);
return 0;
输出:
the total number of float numbers: 5
0.0000000.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.0000000.000000
malloc函数没有将值初始化为零,但我仍然得到零
如果不初始化值,则可以获取任何数据。零是一种有效的"任何数据"。
你更可能在调试构建中看到它,其中一些C++运行时在程序启动时清空了大部分堆内存,以便更容易地看到你在使用它。尽管在我看来,这让你无法初始化数据变得越来越明显,正如这个问题所示。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 加速C++练习2.4
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 内存分配练习