integer overflow in expression
не является переполнением стека, это означает, что GCC обнаружил, что результат вашего выражения вызывает целочисленное переполнение в lvalue, которому вы его назначаете.Например, если вы попытаетесь malloc
что-то вроде INT_MAX * 2
, это выражение вызовет целочисленное переполнение.Если вы приведете его к size_t
, вы должны быть без предупреждения:
void *myvar = malloc((size_t) INT_MAX * 2);
size_t
, конечно, зависит от платформы, и вы могли бы также переполнить, чтоесли вы не можете представить размер блока, который вы хотите выделить в sizeof(size_t)
битах.По сути, убедитесь, что вы используете тип, способный представлять объем памяти, который вы хотите выделить, и что он совместим с size_t
(поскольку это то, чего ожидает malloc()
, согласно stdlib.h
).