【发布时间】:2021-02-14 12:16:01
【问题描述】:
我打算清理一块内存,然后在其中放入一个结构变量并在新清理的内存中分配新值,但我无法从指针变量指向的地址启动结构变量(ptr=00D51590) .如程序output中红色箭头所示,我无法摆脱旧内存变量的残余。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
struct DataSet{
char data1;
int data2;
char data3;
short data4;
};
int main(){
uint8_t *ptr;
struct DataSet data;
ptr=calloc(16,sizeof(uint8_t));
data.data1=0x11;
data.data2=0xAABBCCDD;
data.data3=0x55;
data.data4=0xAABB;
printf("Value of ptr=%p\n\n",ptr);
ptr=(uint8_t*)&data;
uint8_t totalSize=sizeof(struct DataSet);
printf("Memory address Content\n");
printf("=======================================\n");
for(uint8_t i=0;i<totalSize;i++){
printf("%p= %X\n",ptr,*ptr);
ptr++;
}
printf("\n\nTotal memory consumed by struct variable=%d\n",sizeof(struct DataSet));
return 0;
}
【问题讨论】:
-
您正在使用
ptr = (uint8_t*) &data;泄漏内存,因为ptr 指向ptr = calloc(16, sizeof(uint8_t));分配的空间 -
另外,请更好地格式化您的代码。你可以使用这样的在线工具techiedelight.com/tools/clike