int value[64];
for ( int i = 0; i < 64 ; i++)
{
value[i] = i;
}
return value;
value
определено в локальной области действия initialize()
, а также, если вы предполагаете, что это допустимо, вы возвращаете ячейку памяти на первой итерации, что делает содержимое value[]
мусором после value[0]
.
Когда вы определяете переменную в локальной области видимости, она перестает существовать, когда функция достигает завершения. Возврат указателя на локальную переменную вызывает неопределенное поведение, поскольку вы не должны обращаться к памяти (и использовать).
Неопределенное поведение помощник ;)
Если вы хотите исправить это, вы должны сделать что-то вроде:
int * result = malloc(sizeof(int)* 64);
if(!result)
return 0;
for ( int i = 0; i < 64 ; i++)
{
result[i] = i;
}
return result;
А также проверьте в main()
, возвращает ли initialize()
0
или нет (AKA, если malloc()
прошло успешно или не удалось), и если возвращаемое значение не было 0
, убедитесь, что free()
память.
int main( )
{
int * p;
p = intialize();
if(p)
{
p[32] = 100;
printf("%d", p[32]);
free(p);
}
return 0;
}
Вы также можете иметь free()
вне условия if
, потому что выполнение free(0)
безопасно.