- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在减少指针分配的内存时遇到困难。这样做是因为此指针指向一个 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()
但我得到了相同的结果。
真的很感激一些帮助,这是一个普遍的问题,但我需要类似的东西来处理一个需要释放所有内存的学校项目。如果我能解决这个问题,我应该能够释放内存。谢谢!
编辑:如果我删除 free() 调用并再次简单地调用 malloc(),它会起作用,但我认为这是错误的方法,因为旧分配的空间永远消失了,我永远无法释放它。
最佳答案
pack->data = &buffer;
执行该行后,data
将保存变量buffer
的地址。它将不再保留它之前保留的堆上的地址(如果您不在其他地方保留该地址,该地址现在会泄露)。然而,free
仅适用于堆上的地址,因此在 pack->data
上调用 free
会调用未定义的行为。
关于c - free() 然后再 malloc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788287/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!