2013-02-15 65 views
0

我的简化代码看起来像下面的东西:代码在Windows XP上的malloc()崩溃

char decrypted[64] = "[email protected]    "; 
int realsize = 8; 
    realloc(decrypted, realsize); 

    char *dec2 = (char *) malloc(realsize+1); // Exe crashes at this point 

我猜测它与的char * DEC2做的,但这只是崩溃的Win XP出于某种原因。

+0

我已经将问题重新标记为C,因为它不包含C++代码。 – 2013-02-15 13:27:09

+0

@AlexeyFrunze - malloc是typecast的事实是C++,不需要C语言。如果我现在告诉OP不要使用类型malloc(不应该用C语言完成),但是OP实际上正在构建C++代码(g ++),它会导致错误。 – Mike 2013-02-15 13:31:58

+0

@Mike引用的代码可以编译为C或C++,是的,只需要在C++中进行强制转换。 – 2013-02-15 13:34:55

回答

7

您不能realloc()什么没有被分配与malloc()calloc()realloc()

+0

我明白了,但为什么我的exe只会在Xp机器上崩溃。 – Dreamer78692 2013-02-15 13:29:23

+3

纯粹的运气,没有别的。你试图做的是按照语言标准分类为“未定义的行为”,你无法推理它。 UB不好,应该避免,除了知道什么时候构成UB之外,你只需要知道这一点。 – 2013-02-15 13:30:56

+4

...因为在堆栈数组上调用'realloc()'是“未定义行为” - 请参阅http://pubs.opengroup.org/onlinepubs/009696899/functions/realloc.html - 因此C运行时可以执行任何操作它希望包括*不*崩溃。 – 2013-02-15 13:32:12

2

decrypted是在堆栈上分配的数组。 realloc只能用malloccalloc重新分配在堆上分配的内存。

+0

谢谢,我现在明白了。 – Dreamer78692 2013-02-15 13:52:17

相关问题