| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1781 人关注过本帖
标题:如何把malloc申请的地址空间,里面的值赋值为0
只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
结帖率:84.38%
收藏
已结贴  问题点数:5 回复次数:6 
如何把malloc申请的地址空间,里面的值赋值为0
我用malloc申请了一段堆内的空间,现在我想把这些空间内填充上0,请问怎么才能把值赋上去
如下这种方式会报错,不知道怎么才能对空指针指向的地址进行赋值.
    LPVOID pMemBufAdd = malloc(50);
    for(int i=0,i<50,i++)
    {
        *pMemBufAdd = 0;
    }
这样不行,应该怎么才能对void指针指向的地址进行赋值呢?
搜索更多相关主题的帖子: 空间 赋值 申请 malloc 地址 
2024-12-03 00:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:3 
    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) );

2024-12-03 08:35
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
收藏
得分:0 
已解决,方法是需要什么类型就用强制类型转换告诉编译器把此指针当作什么类型地址来看待.如:*((int *)pMemBufAdd) = 10;这样就不会报错错了
2024-12-03 08:39
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 2楼 rjsp
memset() 此函数似乎很实用!!谢谢
2024-12-03 08:45
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 2楼 rjsp
memset()是按字节赋值的,汗  即便是传入int型指针也是按字节赋值,大家需要注意
2024-12-03 08:48
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 2楼 rjsp
如果我要把一段比较长的数据copy到申请的堆里,
除了for,有没有效率更高的方法?
2024-12-03 08:52
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:242
专家分:1856
注 册:2023-6-29
收藏
得分:3 
你说的for是表示一切循环语句?  如果是, 那避免不了, 任何长数据复制都需要循环操作, 如果你认为strcpy, memecpy就没用for,那我无话可说,   还有int的宽度是由cpu决定的, 一般不是字节,  所以要提高效率, 你得提高数据类型的宽度, 从而减少内存的读写次数, 比如使用long int , long double等,  谁长用谁
2024-12-03 10:34
快速回复:如何把malloc申请的地址空间,里面的值赋值为0
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026038 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved