我这里有一个情况,我有三个 api 一起工作来打印一个长字符串(512 个字符)。 我的第一个api用于分配512字节的内存,返回的地址是2000,之后第二个api将打印字符串,它在中间使用memcpy操作,但是现在当我从这个api返回时,第一个api中分配的 block 的地址已经改变从 2000 年到 2012 年,第 3 个 API 将使用地址 2012 释放分配的 block 。
这是预期的行为还是第三个 API 需要地址 2000 才能正确释放内存块?
最佳答案
不,这听起来好像出了什么问题。
如果没有看到您的代码,很难更具体。
听起来你的代码是这样做的:
void print_something(void)
{
char *s = allocate_string();
print_string(s);
free_string(s);
}
那么函数中s
的值应该永远不会改变;其他函数只能按值获取s
,因此它们无法合法地更改它。当然,内存覆盖可以做任何事情。
关于c - 是否是 memcpy 所期望的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219376/