Programa de depuración de problemas y soluciones comunes

1, CE (error de compilación) error de compilación

De hecho, muchas veces por el mensaje de error es devuelto será capaz de detectar el error.

① falta símbolos, como se muestra a continuación

punto y coma que falta
Error expresado en la primera frase "printf" antes de fallar un punto y coma,
la segunda frase indica error "retorno" antes de fallar un punto y coma.
Por lo general, en la línea equivocada en la línea para encontrar el punto y coma que falta. Por ejemplo,

    int main()
    {
        int sas   //here;
        printf("%d",a[7]);
        if(1)
        a[0]=1   //here;
        return 0;
    }
    
    

De acuerdo con la información de código y la imagen de arriba, es fácil determinar dónde está el error.

② parámetros faltantes

De esta manera:

void f(int a)
{
    ......
}
int main()
{
    f();
    return 0;
}
    
    

Este mensaje de error se devolverá:

[Error] muy pocos argumentos a la función 'void f (int)'

Damos instrucciones en el uso de los parámetros de función es demasiado pequeño.

③ Si el STL, STL y está correspondientes estados de la CE, a continuación, un mensaje de error puede ser complejo.

Pero no tenga miedo, lo complicado que los errores no se puede.

Así lo asegura un problema común después de clase.

#include<cstdio>
#include<algorithm>
using namespace std;
struct A
{
    int v,c;
}a[15];
int main()
{
    for(int i=1;i<=10;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+11);
}
    
    

CE ??? y luego el picante mensaje de error tantos Qaq
también mostrará un montón de código:

  template<typename _RandomAccessIterator>
    void
    __insertion_sort(_RandomAccessIterator __first,
             _RandomAccessIterator __last)
    {
      if (__first == __last)
    return;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
    {
      if (*__i < *__first)
        {
          typename iterator_traits<_RandomAccessIterator>::value_type
        __val = _GLIBCXX_MOVE(*__i);
          _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
          *__first = _GLIBCXX_MOVE(__val);
        }
      else
        std::__unguarded_linear_insert(__i);
    }
   }
    
    

Leer ah Qaq
pero eso está bien, sabemos que esto es la línea equivocada:

si (* __ i <* __ primero) {···}

¿Qué significa? Piense tipo se utiliza para hacer? Ordena, derecha. Nuestro A es una estructura, que contiene C, V dos números.
Para concluir: el programa no sabe en qué tipo de.
¿Cómo hacerlo? la función de escritura a mano cmp.
Si desea ordenar por C, por lo que:

bool cmp(A a,A b)
{
    return a.c<b.c;
}
    
    

A continuación, ordenar cambiarlo:

tipo (a + 1, a + 11, cmp);

De esta manera, compilar!

2, RE (Ejecución de error) Error en tiempo de ejecución

accidente en tiempo de ejecución

La figura poco grande = V =

En concreto, hay las siguientes soluciones:
① comprobar en scanf si unirse a la% y otros símbolos necesarios.
② comprobar si los límites de la matriz (índice de matriz es negativo, el subíndice de matriz es demasiado grande).
③ Si el STL, por favor revise cuidadosamente las declaraciones relacionadas con el TEL, si se trata de una estructura o función de los datos.
④ Si el puntero, puede comprobar si el puntero se inicializa en NULL.
⑤ Compruebe si recursividad demasiadas veces, haciendo que la pila explosión.

3, WA (la respuesta es incorrecta)

Piense en la corrección de su propio algoritmo de ella.

derecho algoritmo? Consulte la siguiente:

En primer lugar, la salida del programa de los resultados inesperados, tales como 0, valor máximo.

① ningún valor inicial no es una matriz?
② no es la memoria de acceso ilegal (acceso a la memoria a veces ilegal no se volverá a)?
③ si el número de ciclos es muy por encima o por debajo de las expectativas?
④ no es de tipo int de la explosión?

En segundo lugar, los resultados no son consistentes con las proyecciones de la salida del programa, pero no es muy diferente.

① valor inicial asignado para ver si hay mal.
② ver si existe la "==" en lugar de "=".
③ ver si hay confundir ">" "<" "> =" "<="
④ tipo de variable, ¿verdad? tipo de salida derecho (por ejemplo scanf ( "% c", ( int) a);)?

En tercer lugar, el uso experto de la función de depuración.

No tiene que activar el panel de depuración variables intermedias de salida de depuración es también una manera buena.
Uno (o más) variables clave cambian en el hueco entre el programa y los cambios esperados a menudo puede encontrar el problema mediante la comparación.

4, AC (aceptada)

Entonces usted es Bang Bang yo! ⊙v⊙

Pues bien, el futuro será actualizado.

Publicado 75 artículos originales · ganado elogios 80 · Vistas a 20000 +

1、CE(Compile Error)编译错误

其实很多时候通过返回的错误信息就能找出错误。

①缺失符号,如下图

punto y coma que falta
第一句Error表示在“printf”前少了一个分号,
第二句Error表示在“return”前少了一个分号。
通常在错误行的上一行找缺失的分号。比如,

    int main()
    {
        int sas   //here;
        printf("%d",a[7]);
        if(1)
        a[0]=1   //here;
        return 0;
    }
  
  

根据代码和上面图片的信息,很容易判断错误在哪。

②缺失参数

比如这样:

void f(int a)
{
    ......
}
int main()
{
    f();
    return 0;
}
  
  

就会有这样的错误信息返回:

[Error] too few arguments to function ‘void f(int)’

说明我们在使用函数时给予的参数过少。

③如果使用了STL,并且是STL相关语句CE,那么错误信息可能很复杂。

但是不要怕,错误可能并不是多么复杂。

所以下面说一个sort常见的问题。

#include<cstdio>
#include<algorithm>
using namespace std;
struct A
{
    int v,c;
}a[15];
int main()
{
    for(int i=1;i<=10;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+11);
}
  
  

然后就CE 了··· 而且错误信息辣么多QAQ
还会跳出来一串代码:

  template<typename _RandomAccessIterator>
    void
    __insertion_sort(_RandomAccessIterator __first,
             _RandomAccessIterator __last)
    {
      if (__first == __last)
    return;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
    {
      if (*__i < *__first)
        {
          typename iterator_traits<_RandomAccessIterator>::value_type
        __val = _GLIBCXX_MOVE(*__i);
          _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
          *__first = _GLIBCXX_MOVE(__val);
        }
      else
        std::__unguarded_linear_insert(__i);
    }
   }
  
  

看不懂啊QAQ
不过没关系,我们知道错误行是这个:

if (*__i < *__first){···}

啥意思呢?想想sort是用来干什么的?排序,对吧。而我们的a是一个结构体,里面包含着c,v两个数。
于是就得出结论:程序不知道按什么来排序了。
怎么办呢?手写cmp函数。
如果想按c排序,就这样:

bool cmp(A a,A b)
{
    return a.c<b.c;
}
  
  

然后把sort改一下:

sort(a+1,a+11,cmp);

就这样,编译通过!

2、RE(Running Error)运行时错误

accidente en tiempo de ejecución

图有点大=V=

En concreto, hay las siguientes soluciones:
① comprobar en scanf si unirse a la% y otros símbolos necesarios.
② comprobar si los límites de la matriz (índice de matriz es negativo, el subíndice de matriz es demasiado grande).
③ Si el STL, por favor revise cuidadosamente las declaraciones relacionadas con el TEL, si se trata de una estructura o función de los datos.
④ Si el puntero, puede comprobar si el puntero se inicializa en NULL.
⑤ Compruebe si recursividad demasiadas veces, haciendo que la pila explosión.

3, WA (la respuesta es incorrecta)

Piense en la corrección de su propio algoritmo de ella.

derecho algoritmo? Consulte la siguiente:

En primer lugar, la salida del programa de los resultados inesperados, tales como 0, valor máximo.

① ningún valor inicial no es una matriz?
② no es la memoria de acceso ilegal (acceso a la memoria a veces ilegal no se volverá a)?
③ si el número de ciclos es muy por encima o por debajo de las expectativas?
④ no es de tipo int de la explosión?

En segundo lugar, los resultados no son consistentes con las proyecciones de la salida del programa, pero no es muy diferente.

① valor inicial asignado para ver si hay mal.
② ver si existe la "==" en lugar de "=".
③ ver si hay confundir ">" "<" "> =" "<="
④ tipo de variable, ¿verdad? tipo de salida derecho (por ejemplo scanf ( "% c", ( int) a);)?

En tercer lugar, el uso experto de la función de depuración.

No tiene que activar el panel de depuración variables intermedias de salida de depuración es también una manera buena.
Uno (o más) variables clave cambian en el hueco entre el programa y los cambios esperados a menudo puede encontrar el problema mediante la comparación.

4, AC (aceptada)

Entonces usted es Bang Bang yo! ⊙v⊙

Pues bien, el futuro será actualizado.

Supongo que te gusta

Origin blog.csdn.net/qq_36693514/article/details/77905589
Recomendado
Clasificación