【发布时间】:2018-01-17 13:58:56
【问题描述】:
我有一个文件的内容已经加载到内存中,我想将文件中的数据分配给一组方便的结构,我不想分配新的内存。
所以我有了来自文件的数据开始的内存指针,从那里我处理这个指针,将值分配给不同的结构,但随后我到达程序崩溃的点。
//_pack_dynamic is the pointer to the data in memory
us *l_all_indexes = (us *) _pack_dynamic; //us is an unsigned short
printf("Index 0:%d", l_all_indexes[0]); //here is where the program crashes
_pack_dynamic += sizeof(us) * m_number_of_indexes;
数据,至少对于第一个元素,是存在的,我可以像这样把它拿出来:
us temp;
memcpy(&temp, _pack_dynamic, sizeof(us));
知道如何在不分配新内存的情况下从 _pack_dynamic 中提取所有索引 (m_number_of_indexes) 并将它们分配给 l_all_indexes 吗? p>
【问题讨论】:
-
结构被打包,数据正确对齐,是吗?
-
us是什么?为什么可以打印?我还看到一些缺少的括号。 -
是的。我使用 little-endian 将文件打包在 python 中(它适用于 little endian 处理器)。之前,我让它处理新的内存分配,但决定摆脱它。
-
@Eugene Sh "us" 在一个无符号的缩写中,抱歉我在复制数据时错过了 printf 上的括号(代码编译)
-
在 C++ 中这是未定义的行为,请改用
std::memcpy。它也可能是 C 中的 UB,您需要检查标准。
标签: c pointers memory-management alignment