Исключение первого шанса с плавающим массивом указателей

0
    int main(int argc, char** argv)
{
    printf("Enter the file name:\n");
    char inputFileLoc[100], outFileLoc[100];
    scanf("%s", inputFileLoc);
    int * n = 0;
    float rcoef[2];
    FILE * inFile = fopen("D:\\test.txt", "r");
    FILE * outFile = fopen(outFileLoc, "w");
    if (inFile == NULL)
    {
        printf("File not found at %s", inputFileLoc);
    }
    else
    {

        printf("How many data points should we read in?");
        scanf("%i", &n);
        float *xdata = (float *)calloc(sizeof(float), *n);
        float *ydata = (float *)calloc(sizeof(float), *n); 
        for (int i = 0; i < *n; i++)
        {
            fscanf(inFile, "%f%f", &xdata[i], &ydata[i]);
        }
        fregression(xdata, ydata, rcoef);
        printf("Where would you like to save the file to?\n");
        scanf("%s", outFileLoc);
        fprintf(outFile, "The slope and intercept are %f and %f", rcoef[0], rcoef[1]);
        free(xdata);
        free(ydata);
    }
    fclose(inFile);
    fclose(outFile);
    return 0;
}

Я получаю сообщение об ошибке в строке "float * xdata = (float *)..... и я понятия не имею, почему? Я пропустил какой-либо обработчик исключений, потому что это единственное, что я могу придумать.

  • 2
    Вы хотите, чтобы n было int , а не int* .
  • 2
    Я бы сказал, что вы должны кодировать на C, а также пометить это как C, так как это больше C, чем C ++.
Показать ещё 5 комментариев
Теги:
pointers

2 ответа

0
  1. измените int * n на int n, когда scanf пытается записать в память, которая не инициализирована.

  2. В calloc также внести изменения, поскольку он пытается назначить из * n, который не определен правильно

Он отлично работает, когда я пытался с двумя изменениями. даже если вы получите ошибки после этого, укажите полностью.

0

Это неверно:

int * n = 0;

следует изменить на

int n = 0;

scanf должен получить адрес для записи, а не адрес указателя. Даже если вы хотите использовать указатель, тогда необходимо выделить память, и n должен указать на это. В этом случае вы должны отбрасывать & n при переходе к scanf то есть scanf("%i", n); все должно быть в порядке.

  • 0
    Даже с внесением изменений все равно выдает ту же ошибку. Первоначально у меня было то, что у вас было здесь, прежде чем я сменил его на код выше.
  • 0
    Почему бы вам не сделать std::cin >> n; ? Какую ошибку это дает?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню