2013-02-15 121 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