首先,sizof(long)
是特定于实现的,在 64 位 Linux 上是 8 个字节,而在 Windows 和 32 位 Linux 上是 4 个字节,AFAIK。malloc(8)
如果您想显式分配 8 个字节,请使用。虽然,既然你想存储int
,看来,使用malloc(sizeof(*mem_start_ptr))
. 另外,不要强制转换 的返回值malloc
,它在 C 中是多余的,甚至可以隐藏错误。现在,要存储这两个 4 字节值:
/* for the first one. Let's use 42 */
*mem_start_ptr = 42;
/* for the second one. Let's put the value of of some variable here */
*(mem_start_ptr + 1) = int_variable;
你应该阅读指针算法。也可能关于数组。谷歌是你的朋友。另外,不知道您的代码中的这部分是做什么用的。因为它没有做你可能期望它做的事情:
int data;
data = &mem_start_ptr
最后,我会像这样重写您的代码:
int *mem_start_ptr;
mem_start_ptr = malloc(sizeof(*mem_start_ptr));
*mem_start_ptr = your_1st_4bytes;
*(mem_start_ptr + 1) = your_2nd_4bytes;
不再需要后不要忘记free()
它。另外,我没有在这里拍摄,但也不要忘记检查NULL
,因为malloc()
失败时返回。
再一次 - 阅读指针算术。谷歌是你的朋友;]