2012-05-30 11 views
5

A veces me sale esta "depuración de aserción" error al ejecutar mi proyecto Qt en modo de depuración (image). No sé dónde estoy equivocado porque el compilador no dice nada y no sé qué hacer para encontrar mi error.depuración de aserción: _CrtIsValidHeapPointer (pUserData)

Programa en Windows Vista, usando Qt Creator 2.4.1, Qt 4.8.1.

Mi programa tiene que leer algunas informaciones desde un dispositivo láser y guardarlos en un archivo con un código similar al siguiente:

void runFunction() 
{ 
    configure_Scanning(...); 

    while(...) 
    { 
     // do something 
     scanFunction(); 
     // do something 
    } 
} 

y este es mi función "incriminado" (donde creo que el problema es)

void scanFunction() 
{ 
    file.open(); 

    data = getDataFromDevice(); 

    if(flag) 
    { 
     if(QString::compare(lineB,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineB << endl; 
      lineB = ""; 
     } 
     lineA.append(data+"\t"); 
    } 
    else 
    { 
     if(QString::compare(lineA,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineA << endl; 
      lineA = ""; 
     } 
     lineB.prepend(data+"\t"); 
    } 

    file.close(); 
} 

Dónde Línea y lineB son inicialmente dos QString vacío: la idea es que hago un escaneo bidireccional para guardar la información en una matriz 2D (lado a otro m -X a + X y viceversa, mientras que Y va a un objetivo específico). línea A memoriza la lectura (-) a (+); línea B memoriza la lectura (+) a (-). Cuando la dirección de escaneo cambia, escribo línea A (o línea B) en el archivo y continúo con el escaneo.

¿Entiende lo que dije? ¿Podría sugerirme una solución?

Gracias y lo siento por mi Inglés: P

+2

haga clic en Reintentar en el diálogo para depurar el programa, tal como dice. Luego, revisa la pila de llamadas o agrégala a esta pregunta y deberías obtener una mejor idea de lo que va mal. En una nota al margen, abrir y cerrar constantemente un archivo probablemente no sea necesario y ocasiona cierta sobrecarga. – stijn

+0

Sé que abrir y cerrar un archivo en cada paso no es la mejor estrategia, pero tengo que hacerlo para evitar la pérdida de datos en caso de una interrupción inesperada. –

+0

¿no es eso lo que 'flush()' hace? – stijn

Respuesta

10

_CrtIsValidHeapPointerUserData significa, que usted tiene un montón resulte dañado, lo cual se nota por corrector de depuración montón. Sospeche a todos los que pueden escribir cualquier información en cualquier objeto dinámico eliminado. Y sí, recibirá la corrección de montón no de forma inmediata al reescribir, sino en la siguiente comprobación de montón, que se realizará en cualquier asignación/desasignación de memoria siguiente. Sin embargo, se debe rastrear simplemente mediante una pila de llamadas en aplicaciones de subproceso único.

+0

No dije que "mi" Qt Creator no me permite ejecutar la aplicación con el depurador. Entonces no puedo verificar ningún error en el tiempo de ejecución. ¿Podrías explicarme cómo revisar el montón? –

+0

Realmente no puedo decir.La forma de fuerza bruta es reemplazar TODOS los punteros con clases de punteros inteligentes y configurarlos para que emitan mensajes de error cuando se detecta el problema. – Forgottn

+0

¡Buena idea! Pero ... No sé cuando se detecta el problema. De todos modos, lo intentaré de esta manera. ¡Gracias por la idea! –

Cuestiones relacionadas