注册 登录
编程论坛 C语言论坛

如何把malloc申请的地址空间,里面的值赋值为0

a451410 发布于 前天 00:23, 259 次点击
我用malloc申请了一段堆内的空间,现在我想把这些空间内填充上0,请问怎么才能把值赋上去
如下这种方式会报错,不知道怎么才能对空指针指向的地址进行赋值.
    LPVOID pMemBufAdd = malloc(50);
    for(int i=0,i<50,i++)
    {
        *pMemBufAdd = 0;
    }
这样不行,应该怎么才能对void指针指向的地址进行赋值呢?
6 回复
#2
rjsp前天 08:35
    void* pMemBufAdd = malloc( 50 );
    for( size_t i=0; i!=50; ++i )
        ((char*)pMemBufAdd)[i] = 0;
在 C++ 中并不合法

但一般都是用具体类型,比如
    char* pMemBufAdd = malloc( 50 );
    for( size_t i=0; i!=50; ++i )
        pMemBufAdd[i] = 0;

for效率太低,一般用 memset
    char* pMemBufAdd = malloc( 50 );
    memset( pMemBufAdd, 0, 50 );

还可以用 calloc,比如
char* pMemBufAdd = calloc( 50, sizeof(char) );

#3
a451410前天 08:39
已解决,方法是需要什么类型就用强制类型转换告诉编译器把此指针当作什么类型地址来看待.如:*((int *)pMemBufAdd) = 10;这样就不会报错错了
#4
a451410前天 08:45
回复 2楼 rjsp
memset() 此函数似乎很实用!!谢谢
#5
a451410前天 08:48
回复 2楼 rjsp
memset()是按字节赋值的,汗  即便是传入int型指针也是按字节赋值,大家需要注意
#6
a451410前天 08:52
回复 2楼 rjsp
如果我要把一段比较长的数据copy到申请的堆里,
除了for,有没有效率更高的方法?
#7
yiyanxiyin前天 10:34
你说的for是表示一切循环语句?  如果是, 那避免不了, 任何长数据复制都需要循环操作, 如果你认为strcpy, memecpy就没用for,那我无话可说,   还有int的宽度是由cpu决定的, 一般不是字节,  所以要提高效率, 你得提高数据类型的宽度, 从而减少内存的读写次数, 比如使用long int , long double等,  谁长用谁
1