第一次 scanf 后 C 程序崩溃
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])
.
这个函数导致我的程序崩溃:
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])
.