簡體   English   中英

第一次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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM