Hola,
Código C++:
Ver originalint ingreso(polinomio *valores){
...
int matriz[valores->grado+1];
...
valores->coeficiente=matriz; /*paso de los coeficientes al puntero de estructura, hago esto, porq en el ejercicio la struct debe tener un puntero que apunte a la matriz de los coeficientes*/
...
La variable matriz es local a la función ingreso, esa variable desaparece o se vuelve inválida al terminar la función, resultando en un puntero a una dirección de memoria desconocida o inválida. Lo que tienes que usar es memoria dinámica, para que ese espacio de memoria se mantenga permanentemente aun cuando salga de la función.
Código C++:
Ver originalint * matriz = new int[valores->grado+1];
Al terminar de usar valores->coeficiente (cuando ya no lo vayas a utilizar mas en todo el programa) debería de usarse el operador delete[].
Saludos,