В настоящее время я пытаюсь решить задачу, которая для меня довольно трудна, новичок в C, и я пришел к этому моменту, когда я не знаю, что делать дальше.C-программа: ошибка сегментации
Моя задача - реализовать многочлены с несколькими функциями .... Функции должны быть понятны, когда вы смотрите на код, который я думаю.
Моя точная проблема заключается в том, что я не получаю ошибку компилятора, но с ошибкой сегментации. Я отметил, где мои попытки отладки привели меня к. Но я совершенно не понимаю, что мне нужно изменить. Надеюсь, кто-то может помочь мне исправить мой код.
Так вот три части: код Номер один: poly.c
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include "poly.h"
struct poly_t {
unsigned degree;
int *coeffs;
};
//constructor: heap
poly_t *poly_alloc(unsigned degree){
poly_t *heap_p;
heap_p = malloc(sizeof(*heap_p)+(degree+1)*sizeof(int)); //or malloc(sizeof(*heap_p)*(degree+1)) furthermore not sure if degree or degree +1
}
//free heap
void poly_free(poly_t *p){
int *coeffs = p->coeffs;
free(coeffs);
free(p);
}
void poly_set_coeff(poly_t *p, unsigned deg, int coeff){
p->degree = deg;
p->coeffs += deg;
p->coeffs[deg] = coeff;
//does not work Segmentation Fault not sure what to do
//p->coeffs += deg;
//*p->coeffs = coeff;
printf("%d",*p->coeffs);
}
//different variations
poly_t *poly_linear(poly_t *p, int a1, int a0){
p->degree=1;
*p->coeffs=a1;
p->coeffs++;
*p->coeffs=a0;
p->coeffs--;
}
poly_t *poly_quadratic(poly_t *p, int a2, int a1, int a0){
p->degree=2;
*p->coeffs=a2;
p->coeffs++;
*p->coeffs=a1;
p->coeffs++;
*p->coeffs=a0;
p->coeffs-=2;
}
//evaluate using horner
int poly_eval(poly_t const *p, int x){
int d = p->degree;
int next;
int adr = *p->coeffs;
int *arr = p->coeffs;
int res = arr[d];
for(int i=0; i<=d; i++){
adr+=(d-i);
next = arr[adr];
adr-=(d-i);
res = res*x+next;
}
return res;
}
//constructor : .txt
poly_t *poly_alloc_d(){
//needs to be finished
}
Номер два: main.c
#include <stdlib.h>
#include <stdio.h>
#include "poly.h"
int main(int argc, char** argv){
if(argc<3){
fprintf(stderr, "syntax: %s x coeffs...", argv[0]);
return 1;
}
poly_t *p = poly_alloc(argc-3);
for(int i = 2; i<argc; i++){
int coeff = atoi (argv[i]);
poly_set_coeff(p, i-2, coeff);
}
return 0;//for debugging
int x=atoi(argv[1]);
int y=poly_eval(p,x);
poly_free(p);
printf("%d\n", y);
return 0;
}
И наконец мой файл заголовка: poly.h
#ifndef POLY_H
#define POLY_H
/* unvollständiger Verbund */
typedef struct poly_t poly_t;
poly_t *poly_alloc(unsigned degree);
void poly_free(poly_t *p);
void poly_set_coeff(poly_t *p, unsigned deg, int coeff);
int poly_eval(poly_t const *p, int x);
#endif /* POLY_H */
Я ценю каждую помощь. Надеюсь, вы поможете мне разобраться в этом, и, пожалуйста, будьте терпеливы со мной новичком до C ... Заранее спасибо
Вы пробовали использовать отладчик? Они часто очень полезны для определения местоположения ошибки времени выполнения, например, ошибки сегментации. – Frxstrem
Добавление к * Комментарий Frxstrem *: Прочтите здесь, может помочь: http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – alk
Но чего именно вы пытаетесь достичь здесь : 'poly_t * p = poly_alloc (argc-3);'? Обычно вы передаете '3-3', по крайней мере, после использования. – alk