2013-02-15 3 views
0

Мой упрощен код выглядит как-то ниже:код сбой в таНос() на окнах XP

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

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

Я предполагаю, что это имеет отношение к полукокса * DEC2, но это выходит из строя только Win XP по какой-то причине ,

+0

Я задал вопрос как C, потому что он не содержит кода на C++. –

+0

@AlexeyFrunze - факт, что malloc был typecast, был C++, в C это ненужно. Если я скажу OP не о методе malloc (который не должен выполняться на C), но OP действительно строит код C++ (g ++), это приведет к ошибке. – Mike

+0

@Mike Котируемый код может быть скомпилирован как C или C++, и да, приведение требуется только в C++. –

ответ

7

Вы не можете realloc() то, что не было выделено malloc() или calloc() или realloc().

+0

Я вижу, но почему мой exe только терпит крах на машинах Xp. – Dreamer78692

+3

Чисто удачи, больше ничего. То, что вы пытаетесь сделать, категоризируется как «неопределенное поведение» по языковому стандарту, и вы не можете рассуждать об этом. UB плох, и его следует избегать, это все, что вам нужно знать об этом, кроме того, что когда-то создается UB. –

+4

... потому что вызов 'realloc()' в массивах стека является «неопределенным поведением» - см. Http://pubs.opengroup.org/onlinepubs/009696899/functions/realloc.html - поэтому среда выполнения C может делать все он хочет, в том числе * не * сбой. –

2

decrypted - это массив, выделенный в стеке. realloc может только перераспределить память, выделенную в куче, с помощью malloc или calloc.

+0

Спасибо, я понимаю сейчас. – Dreamer78692

Смежные вопросы