возможно, еще одна глупая ошибка, но я действительно не могу об этом подумать. Я пишу базовый класс полиномов, и моя программа внезапно вылетает при вводе пары int .. Я попытался найти решение, но не смог его найти: /
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Homework.h"
#include "Fraction.h"
int main()
{
//Input from user
int degree, i;
printf("Insert the degree of the polynomomial: \n");
scanf("%d", °ree);
//Get the coefficcients
struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1));
int num;
unsigned int den;
for(i = 0; i < degree + 1; i++)
{
num = 0;
den = 1;
printf("Insert the coefficcient of degree %d, first num and afterwards
the den \n", i);
printf("Numerator:\n");
if (scanf("%d", &num) != 1)
printf("Input error\n");
printf("Denominator:\n");
if (scanf("%u", &den) != 1)
printf("Input error\n");
//struct fraction temp = {num, den};
//memcpy(&bucket[0], &temp, sizeof(struct fraction));
}
//Check insertion
printf("Test\n");
//print_fraction(bucket[0]);
}
Программа выходит еще до печати «Тест», и для ввода я использую номер ввода + клавишу ввода.
Большое спасибо за любую помощь!
@SteveSummit Так вы думаете, что этот struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1));
выглядит нормально?
Это нормально, но нужно проверить возвращаемое значение.
@SteveSummit А как это проверить по коду OP? struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1));
= >>> error: invalid application of ‘sizeof’ to incomplete type ‘struct fraction’
... или у вас есть дополнительная информация о #include "Fraction.h"
? чего мы не делаем.
Добавление возвращаемого значения, похоже, решает проблему, спасибо! @SteveSummit
@Michi Извини, когда я ответил на твой вопрос, я ошибочно предположил, что это спрашивает Маттео. Но да, я подтверждаю, что вызов malloc
выглядит нормально. (Хотя, да, когда я сказал это, я сделал обоснованное предположение о struct fraction
и Fraction.h
.)
@MatteoPagin На самом деле я не уверен, какое возвращаемое значение вы имеете в виду, но если вы делаете успехи, я рад это слышать!
Кажется, ваш код работает нормально. Единственные изменения, которые я сделал для его компиляции, заключались в том, чтобы закомментировать строку, в которой вы используете malloc, а также вывести ваш оператор печати в одну строку.
Если вы используете более новую версию Visual Studio, это вызовет проблемы при использовании функции scanf. Вам нужно либо использовать scanf_s, либо отключить предупреждение с помощью этой строки вверху:
#pragma warning(disable: 4996)
Надеюсь это поможет.
Пожалуйста, объясните нам, как вы можете доказать, что код работает нормально, если вы включаете некоторые файлы, которых у вас нет?
Размещенный код выглядит нормально, хотя есть проблемы с сохранением закомментированных строк в
bucket
. Вылетает ли он до или после запроса на получение степени? До или после ввода первых коэффициентов, или вторых, что ли?