首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除C中指针的数据?

如何删除C中指针的数据?
EN

Stack Overflow用户
提问于 2021-02-17 00:02:43
回答 3查看 789关注 0票数 0
代码语言:javascript
复制
char *p = (char *) malloc(10 * sizeof(char));

... let p point to some chars

free(p);
char *p = (char *) malloc(10 * sizeof(char));

由于释放p不删除存储在特定内存地址上的数据,我面临的问题是,对于大型指针来说,新分配的内存与旧的内存重叠,这显然是有问题的。如何删除指针指向的数据?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-17 00:06:16

您不能假设从malloc返回的内存被初始化为任何东西。它可能在第一次初始化为零,但您不能依赖于这种行为。

您可以调用memset来清除从malloc返回的内存。或者考虑使用calloc,它在将指针返回给您之前将内存归零。

通常,如果程序确实需要将内存缓冲区初始化为零,则只能使用memsetcalloc。如果要将字符串复制到其中,则不需要首先将其初始化为零;您只需复制字符串并(如果需要)将'\0'追加到末尾即可。

票数 2
EN

Stack Overflow用户

发布于 2021-02-17 00:28:29

C中没有“删除”数据的概念。当您为数据分配一些内存时,总是会有数据。在您将数据放在那里之前,它可能会以垃圾的形式开始,而您的数据将一直停留在那里,直到您将其他的东西放在那里。您可以将您的数据替换为类似于0或0xFFs的memset(),这将覆盖您的数据。您必须这样做/在/free()之前。

票数 1
EN

Stack Overflow用户

发布于 2021-02-17 00:17:38

代码语言:javascript
复制
void myfree(void *ptr, size_t size)
{
    volatile char *ucptr = ptr;
    if(ucptr) while(size--) *ucptr++ = 0;
    asm("");
    free(ptr);
}
代码语言:javascript
复制
char *p = (char *) malloc(10 * sizeof(*p));

//... let p point to some chars

myfree(p, 10 * sizeof(*p));
char *p = (char *) malloc(10 * sizeof(char));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66233950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档