[英]C program crash after first scanf
此功能导致我的程序崩溃:
void input_data(int** data, int* data_size)
{
int i;
char c;
//input with error handling
do
{
printf("Write, how many integers you want to input: ");
}
while (((scanf("%d%c", data_size, &c) != 2 || c != '\n') && clear_stdin()));
//memory reallocation
*data = (int *) realloc(*data, *data_size * sizeof(**data));
printf("\nInput %d integers\n", *data_size);
for (i = 0; i < *data_size; i++)
{
while ((scanf("%d%c", data[i], &c) != 2 || c != '\n') && clear_stdin());
}
}
在我的main()中,我得到了
int* numbers = (int *) malloc(1 * sizeof(*numbers));
int input_size;
input_data(&numbers, &input_size);
我的程序在第一次输入整数后崩溃,我相信这是由scanf引起的,但我不知道为什么。 如果需要,我可以提供程序的完整源代码。
这没有达到您的期望:
scanf("%d%c", data[i], &c)
data[i]
不是数组第i
个元素的地址。 该表达式转换为*(data + i)
。 该表达式实际上将data
视为int *
的数组,但是data
是指向int *
变量的指针,因此这导致未定义的行为。
您要先取消引用data
,然后获取数组元素。 因此,您想要的表达式是(*data + i)
,或等效地&((*data)[i])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.