我很难减少指针分配的内存。这是因为这个指针指向一个char数组,它将存储字节,但是字节数可能有所不同。
使用了以下结构:
struct packet {
unsigned char *data
}在我的代码中,我首先为数据包和数据分配内存:
struct packet *pack;
pack = malloc(sizeof(struct packet));
pack->data = malloc(MAXSIZE);MAXSIZE是一次读取的最大大小(256个字节)。
在使用缓冲区读取文件并使用:pack->data= &buffer将数据设置为缓冲区后,我将读取文件中的剩余字节(每次使用stat()计算并减去MAXSIZE,直到剩馀的MAXSIZE为止)。
此时,我想让数据指针分配比MAXSIZE更少的内存,因为数据不会那么大,我尝试了以下代码,但是它失败了,并导致了“核心转储”:
free(pack->data);
printf("Memory freed.") // This never gets printed so there is an issue with free...
pack->data = malloc(remaining_size);remaining_size的计算是正确的,所以我知道它应该正确分配。我是不是走错路了?我也尝试过realloc(),但是我得到了同样的结果。
这是一个普遍的问题,但我需要一些类似的东西,为一个学校的项目,需要释放所有的内存。如果我能解决这个问题,我应该能够释放内存。谢谢!
编辑:如果我再次删除空闲()调用并简单地删除malloc(),那么它就能工作,但我认为这是错误的方法,因为旧的分配空间已经永远消失了,而且我永远无法释放它。
发布于 2014-02-14 19:53:34
pack->data = &buffer;执行该行后,data将保存变量buffer的地址。它将不再保存它以前持有的堆中的地址(如果您不将该地址保存在其他地方,则该地址现在已泄漏)。但是,free只适用于堆上的地址,因此调用pack->data上的free会调用未定义的行为。
https://stackoverflow.com/questions/21788287
复制相似问题