0

我有这个 C 函数:

fill_array(&data, &size);

void fill_array(int **data, int *size){
   printf("Size is:");
   scanf("%d", size);
   *data = malloc(*size * sizeof(int *));
   int i = 0;
   for (i = 0; i < size; i++){
      (*data)[i] = rand() % 11;
   }
}

例如,我想将 data[i] 分配给随机数。怎么做这样的事情?我尝试了很多变化,但我的程序总是崩溃。谢谢。

4

4 回答 4

3
*data = malloc(*size * sizeof(**data));
(*data)[5] = 15;

请参阅cdecl网站。

不要投射 malloc

根据问题编辑

for 循环包含错字

for (i = 0; i < size; i++)

它应该是

for (i = 0; i < *size; i++)
于 2013-04-16T13:57:58.787 回答
1

您可以使用(*data)[5] = 15;而不是 this*data[5] = 15;因为优先级[]大于*..

于 2013-04-16T13:59:15.420 回答
1

正如其他人所说,您需要加上括号才能使运算符优先级正确。如果您想大量使用“数组”,创建一个易于使用的临时变量可能是有意义的:

int *p;
...
*data = malloc(*size * sizeof **data);
p = *data;

然后你可以使用p[5]等。

于 2013-04-16T14:10:39.747 回答
0

良好的程序设计要求我们应该将内存分配和实际算法分开。拥有一个接受用户输入分配内存执行某些算法的功能可能不是最佳的程序设计。

因此,正确的解决方案不是修补该功能以使其工作,而是制作一些新功能:

int get_size_from_user (void)
{
  int size;
  printf("Size is:");
  scanf("%d", &size);
  return size;
}

bool alloc_array (int** array, int size)
{
  *array = malloc(size * sizeof(int));
  return *array != NULL;
}

void fill_array (int* array, int size)
{
  // ...whatever you want to do here
  data[5] = 15;
}

瞧瞧,当我们改进程序设计后,对晦涩语法的需求就消失了!巧合?

于 2013-04-16T14:18:37.723 回答