char *p = (char *) malloc(10 * sizeof(char));
... let p point to some chars
free(p);
char *p = (char *) malloc(10 * sizeof(char));由于释放p不删除存储在特定内存地址上的数据,我面临的问题是,对于大型指针来说,新分配的内存与旧的内存重叠,这显然是有问题的。如何删除指针指向的数据?
发布于 2021-02-17 00:06:16
您不能假设从malloc返回的内存被初始化为任何东西。它可能在第一次初始化为零,但您不能依赖于这种行为。
您可以调用memset来清除从malloc返回的内存。或者考虑使用calloc,它在将指针返回给您之前将内存归零。
通常,如果程序确实需要将内存缓冲区初始化为零,则只能使用memset或calloc。如果要将字符串复制到其中,则不需要首先将其初始化为零;您只需复制字符串并(如果需要)将'\0'追加到末尾即可。
发布于 2021-02-17 00:28:29
C中没有“删除”数据的概念。当您为数据分配一些内存时,总是会有数据。在您将数据放在那里之前,它可能会以垃圾的形式开始,而您的数据将一直停留在那里,直到您将其他的东西放在那里。您可以将您的数据替换为类似于0或0xFFs的memset(),这将覆盖您的数据。您必须这样做/在/free()之前。
发布于 2021-02-17 00:17:38
void myfree(void *ptr, size_t size)
{
volatile char *ucptr = ptr;
if(ucptr) while(size--) *ucptr++ = 0;
asm("");
free(ptr);
}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));https://stackoverflow.com/questions/66233950
复制相似问题