Я использую этот код для того, чтобы динамически выделять больше памяти в моем массиве Struct (mystructs
), увеличивая размер size
и перераспределять память:C распределение структура памяти с помощью перераспределить
int size = 1;
MyStruct *mystructs = NULL;
MyStruct *tmp = NULL;
tmp = realloc(mystructs, sizeof(MyStruct) * size);
mystructs = tmp;
Мой вопрос заключается в том, что, даже если я использую size = 1
, он по-прежнему выделяет больше памяти, чем необходимо для этого размера, потому что, когда я начинаю печатать значения struct с помощью printf(), я обычно могу распечатать несколько сотен элементов массива, хотя предполагается, что он содержит только один элемент , Распечатка означает вызов чего-то вроде: printf("%d", mystructs[i].value);
. Почему значение i
будет стоить около нескольких сотен, прежде чем он, наконец, будет segfaults, потому что я получил доступ к памяти, в которой я не должен был?
Неопределенное поведение означает, что все может случиться – bolov
Общая идиома заключается в том, чтобы использовать «malloc» в первую очередь. –
Попробуйте использовать malloc, это будет то же самое. –