我的程序/程序异常退出?我怀疑以下代码有问题:如何投射指针(使之变大)
有两个typedef TYPE1,TYPE2。 (TYPE1的尺寸是大于TYPE2)
TYPE1 var1;
TYPE2 var2;
....
....var2 has been assigned.
....
memset(&var1, 0, sizeof(var1));
memcpy(&var1, (TYPE1 *)&var2, sizeof(TYPE1));
printf("....");
角色VAR2可能导致访问非法存储器,这可能导致段错误?我认为它可能会混淆内存中var2后面的数据,但不能使分段错误?我发现我的程序在这里退出,因为下面的printf()没有打印任何东西。
演员将按照存储VAR2即使它是只读(VAR2是刚刚的memcpy源()破坏数据。
如果我改变它喜欢的memcpy(& VAR1,(TYPE1会发生什么* )& VAR2,的sizeof(TYPE2));
感谢
输出将IT SKIP从'printf'通常被缓冲。在崩溃之前,您的代码可能已经超过了'printf'。您可能想要使用调试器或至少在此发布更多代码。 – Blastfurnace 2012-03-27 07:58:42
你不需要演员。在C中,Casts几乎总是错误的,并且指向需要重构。除此之外,在memcpy()调用中,您试图在对象结束后通过'&var2'访问数据('sizeof var1> sizeof var2')。 – pmg 2012-03-27 08:01:16
@pmg - 我可以限定“C语言中的演员几乎总是错误的吗?”? “将指针指向void指针几乎总是错误的,因为它从来都不是必需的”(要说实话,当将指针指向void *时,我无法想到任何情况*需要在现代C中进行演员表,所以也许我正在wishy-washy),我不想让人想到“...(unsigned int)c”或者“foo((double)i”)在同一个错误类中 – gbulmer 2012-03-27 08:52:47