2016-11-07 2 views
0

Когда я компилирую следующий код в Mac, он выводит «правильный»; Но когда компилировать его с помощью g ++ (Red Hat 4.4.7-16), он выводит «error». То есть malloc не может работать с новой памятью. Почему и как его решить?Почему разные результаты от mac и linux?

typedef struct NODE_t{ 
    uint32_t pos; 
    char refChar; 
    char targetChar; 
}*NODE; 
int main() { 
    uint64_t sub_size = 51086559504ll; 
    NODE nodes = (NODE) malloc(sub_size); 
    if (NULL == nodes) { 
     printf("error"); 
    } else { 
     printf("correct\n"); 
    } 
    return 0; 
} 
+0

Зачем вам нужно выделять столько памяти? Для этого нет «исправления», в вашей системе недостаточно памяти для резервного копирования вашего запроса «malloc». –

+1

Если у вас установлено более 52 ГБ ОЗУ, ни один из результатов не удивителен. gcc не может получить RAM, а clang, вероятно, даже не пытался и просто оптимизировал всю программу на 'printf (« correct \ n »);'. –

+0

Если это C++, то с ним много чего не так (с использованием 'malloc', C style casts, используя' NULL' вместо 'nullptr',' typedef'ing 'struct') – UnholySheep

ответ

2

Вы получаете сообщение об ошибке, поскольку sub_size слишком велико для реализации Red Hat malloc(). В основном вы запрашиваете больше байтов, чем есть. Может быть, у вас меньше памяти на машине Linux, или в коде может быть некоторый предел, который мешает ему работать, как вы ожидаете.

+0

Да. Код является частью другого программного обеспечения. Мне нужно снова запустить его. Но всегда выполняйте ошибку времени. Наконец, я обнаружил, что в коде нет новой памяти. –

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