【发布时间】:2018-03-18 21:50:33
【问题描述】:
我用 C 语言编写了一个函数,它从用户那里获取 10 个整数并将它们打印出来。
void memoryallocationtest(int number)
{
// allocate space for 10 integer
char *input = malloc( 32 * sizeof(char) );
long *x = malloc( number * sizeof(long) );
char *ptr;
printf("please enter 10 integer X consecutively, -2147483648 <= X <= 2147483647)\n");
/* promts user to enter ith integer
* converts input string to long value and saves result in x
*/
for(int i = 0; i < number; i++)
{
printf( "%i. Integer:", (i + 1) );
scanf( "%s", input );
x[i] = strtol( input, &ptr, 10 );
}
free(x);
free(input);
}
这是一种有效的方法吗?
是否有必要为我的 char 数组“输入”分配和释放空间,或者我应该像 char input[32]; 一样声明它,还是隐含发生的事情?
【问题讨论】:
-
如果您确实将输入限制为
32字符并将整数数量限制为10,则无需动态分配input(不会返回)。事实上,没有任何东西被退回。您只需要动态分配您希望返回指针的memoryallocationtest中声明的对象。我会简单地使用char input[32] = "";,如果您返回x,那么您分配的x很好,但是将您的函数类型更改为long *,并返回x。 (free(x);有点违背目的不是吗?) -
@DavidC.Rankin 这似乎是一个不错的答案。我们可以从未回答的问题列表中解决这个问题吗?
-
好的,我会写出来的。谢谢。