我尝试使用指针将值从另一个函数扫描到数组中。代码如下:
int initialize(int **arr, int count);
int main()
{
int count;
int *numbers;
scanf("Enter the amount of numbers to enter: %d", &count);
initialize(&numbers, count);
free(numbers);
return 0;
}
int initialize(int **arr, int count)
{
int i = 0;
*arr = calloc(count, sizeof(int));
while(i < count)
{
printf("Nr. %d: ", i + 1);
scanf("%d", &arr[i]);
i++;
}
return 0;
}
它正确地分配了内存,然而,初始化中的scanf函数似乎有一个问题,所以它在读取前2个数字后崩溃。你能帮我解决吗?
发布于 2018-10-07 19:46:56
arr
是一个指向int
的指针,因此首先通过*arr
将其设置为指向int
的指针(在像数组一样使用它之前)。
所以这就是
scanf("%d", &arr[i]);
应该是
scanf("%d", &(*arr)[i]);
或其较短的等价物
scanf("%d", *arr + i);
无关,但在C中它至少应该是
int main(void)
不相关的^2:C best中的大小和索引是使用size_t
(随stdlib.h
提供的)定义的。
因此,代码的相关部分将如下所示:
int main(void)
{
size_t count;
int *numbers;
scanf("Enter the amount of numbers to enter: %zu", &count);
...
int initialize(int **arr, size_t count)
{
size_t i = 0;
*arr = calloc(count, sizeof(int));
while (i < count)
...
最后,代码忽略了对相关函数的错误检查:
scanf()
calloc()
错误检查(以及记录错误)是免费的调试!
https://stackoverflow.com/questions/52688145
复制相似问题