它是从memcpy预期的

时间:2013-11-26 14:10:02

标签: c memcpy

我在这里有一个假设,我有三个api一起工作来打印一个长字符串(512个字符)。 我的第一个api用于分配512字节的内存,返回的地址是2000,之后第二个api会打印字符串,它之间使用memcpy操作但是现在当我从这个api返回时,第一个api中分配的块的地址已经改变了从2000年到2012年,第3个api将使用地址2012释放分配的块。

它是预期的行为还是第三个api需要有地址2000才能正确释放内存块?

1 个答案:

答案 0 :(得分:2)

不,这听起来好像出了什么问题。

如果没有看到你的代码,很难更具体。

听起来你的代码就是这样:

void print_something(void)
{
  char *s = allocate_string();
  print_string(s);
  free_string(s);
}

然后函数中s的值永远不会改变;其他功能只按价值获取s ,因此他们无法合法地更改它。当然,内存覆盖可以做任何事情。