我有主要指针,我不知道它的大小。函数将此指针返回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;
}
}
答案 0 :(得分:1)
第二个版本基本上是正确的。
你需要说:
realloc(*row_value, 10 * sizeof(int));
// ^^^
介意明星!
如果有帮助,请将函数参数重命名为:
col_row_value(int ** ptr_to_row_ptr, int ** ptr_to_col_ptr);
这样,你就不会对自己感到困惑。
答案 1 :(得分:1)
此:
*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;