当它获得释放时,以下崩溃:(有使用void*的理由).
bool s = true;
void* arg = &s;
argument = malloc(sizeof(arg));
memcpy(argument,arg,sizeof(arg));
free(argument);
Run Code Online (Sandbox Code Playgroud)
这里的论点是无效*
为什么免费崩溃应用程序?
谢谢
你的问题很可能在其他地方.
由于你有一些误解,sizeof (pointer)我怀疑你的程序中的其他地方有一个缓冲区溢出/下溢导致堆头损坏,然后free当它试图遍历损坏的堆时崩溃.
其他人是正确的,当他们指出你是sizeof (void*)从一个变量只读sizeof (bool),但由于它在堆栈上,内存刚刚超出s几乎肯定是有效的(它可能包含其他局部变量,函数参数,或返回地址,没有如果它们被无意读取,会导致程序崩溃).
memcpy 可以很好地读取未对齐的数据,所以即使你在一个在未对齐的访问上崩溃的架构,这也不是问题.
检查其他动态分配的缓冲区是否溢出.
编辑:我也想回应米洛对一个现已删除的问题的评论:
我需要获得可以分配的任何类型的对象 - 米洛
C++不能那样工作. malloc只能为POD类型分配内存,这必须满足一些非常强大的限制.完全没有符合标准的方法来克隆完全任意类型的实例.
在某些类型上可靠运行的一些方法是:
Clone函数的基类型,则以Clone多态方式调用new char[]和memcpy