作者sunneo (艾斯寇德)
站内Programming
标题Re: [问题] 请问malloc的用法
时间Fri Sep 21 16:32:40 2007
※ 引述《ultrafire ()》之铭言:
: int *ptr;
: 1. ptr = malloc(sizeof(int*) * size);
: 2. ptr = (int*)malloc(sizeof(int) * size);
: 请问一下
: 这两种用法在意义上或allocate出来的记忆体
: 有什麽差别呢?
没差别
malloc只是发出一个讯号去syscall,跟作业系统要一块记忆体
至於他是什麽型别,由指标来解释
因为malloc原型
void* malloc(size_t blocksize);
int* ptr = malloc(sizeof(int*)*size);
int型别的指标 ptr 指向了一块 sizeof(int*) * size 大小的区块
这在c++上会说 不合法的转换,从 void* 到 int*
而在纯C的环境上这会给过
在C++至少应该要 int* ptr = (int*)malloc(sizeof(int*)*size)
而这边会过,而且在blocksize跟你所想像的无误的原因是
sizeof(int*) == 一个整数所占有的大小
等同於 sizeof(int)
如果今天的型别不是int,而是double,甚至char
那麽这样写就会出错
比如有一个比较大的型别
double* ptr = (double*)malloc(sizeof(double*) *size);
假使配置size : 16
顶多只有 8个可以用,因为double指标每次要位移 8 byte,
你期待配置 8 * 16 == 128 //sizeof(double)*size
但是你却配置了 4 * 16 == 64 //sizeof(double*)*size
int *ptr = (int*)malloc(sizeof(int)*size);
这在C++上才被视为正确的写法
--
IceCold::IceCode
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.228.138
※ 编辑: sunneo 来自: 220.132.228.138 (09/21 16:37)
1F:推 minhong:大部分同意,唯最後一句 C++ 建议使用220.135.160.140 09/21 16:59
2F:→ minhong:static_cast<x>(y) 做转型220.135.160.140 09/21 16:59