【发布时间】:2013-11-07 22:35:30
【问题描述】:
这里是编程sn-p
void func1 (UInt8* data, size_t length)
{
UInt8 *data2;
//do some actions to populate data2 with valid data;
length = 12;
data = malloc(length);
memset(data, 0 , length);
memcpy(&data[0], &data2[9] , length);
return;
}
void main()
{
void *data;
size_t dataSize;
func1 (data, dataSize)
printf ("%s", data);
}
这里的问题是,当我在调试器中看到从 func1 返回后的数据地址时,它指向 0x0000。我的理解是,由于数据是在堆上分配的,它应该继续指向它在函数中指向的任何地址。
我在这里错过了什么?
【问题讨论】:
-
C 是Call By Value。这基本上意味着分配给参数不会导致重新分配给调用者中的变量。 (指针允许间接修改对象而无需重新分配。)
-
谢谢。我错过了我试图在这里修改指针本身的观点。
标签: c pointers malloc heap-memory