Как выделить память в этом случае?
У меня есть указатели в main, для которых я не знаю, что это размер. Функция возвращает этот указатель в main. Внутри функции я могу вычислить размер указателя и, следовательно, должен хранить в них значения и возвращать их в main. Как изменить / выделить память в этом случае.
int main()
{
int *row_value, *col_value;
col_row_value(row_value,col_value);
...
return(0);
}
void col_row_value(row_value,col_value)
{
// how to allocate/modify memory for row_value and col_value and store data
// for example would like to allocate memory here
int i;
for(i=0;i<10;i++) {
row_value[i]=i;
col_value[i]=i;
}
}
Я пробовал что-то вроде этого, это не работает
int main()
{
int *row_value, *col_value;
row_value=NULL;
col_value=NULL;
col_row_value(&row_value,&col_value);
...
return(0);
}
void col_row_value(int **row_value,int **col_value)
{
// how to allocate/modify memory for row_value and col_value and store data
// for example would like to allocate memory here
int i;
*row_value=(int*)realloc(*row_value,10*sizeof(int));
*col_value=(int*)realloc(*col_value,10*sizeof(int));
for(i=0;i<10;i++) {
row_value[i]=i;
col_value[i]=i;
}
}
2 ответа:
Это:
*row_value=(int*)realloc(row_value*,10*sizeof(int));
Должно быть:
Обратите внимание, что гипс не нужен. Назначьте результат*row_value = realloc(*row_value,10*sizeof(int)); /** ^ **/
realloc()
временному указателю в случае сбоя перераспределения, что будет означать, что исходная память будет недоступна.int* tmp = realloc(*row_value, 10 * sizeof(*tmp)); if (tmp) { *row_value = tmp; }
Обратите внимание, что цикл
for
не присваивает значение первому элементу вrow_value
илиcol_value
:for(i=1;i<10;i++)
Так как он начинается с индекса
1
и присваивания внутриfor
должны быть:(*row_value)[i] = i; (*col_value)[i] = i;