[C con Clase] fatal error LNK1136: invalid or corrupt file

Steven Davidson srd4121 en njit.edu
Sab Abr 16 04:43:28 CEST 2011


Hola Wolverine,

On 4/15/2011 7:47 PM, wolverine_ch wrote:
> hola Conclase, bueno pues he hecho una lista enlazada usando clases y
> al probarlo en vc++ 6.0 me sale esto:
>
> Linking...
> C:\Archivos de programa\Microsoft Visual Studio\VC98\LIB\comdlg32.lib
> : fatal error LNK1136: invalid or corrupt file
> Error executing link.exe.
>

Sospecho que has creado un proyecto para crear una aplicación GUI de 
MS-Windows, cuando en realidad es un programa para la consola (de 
MS-Windows).

> y al probarlo en turbo c++ 4.5 se ejecuta normal pero me sale un
> linker warning que dice: "No module definiton file specified: using

No recuerdo muy bien este mensaje de TC++. Hace tiempo que no uso este 
compilador. Creo que tiene algo que ver con alguna biblioteca o módulo 
que necesitas indicar o configurar para el enlazador. Sin embargo, se 
trata de un aviso y no de un error, por lo que no debe ser crucial para 
que el enlazador realice su trabajo.

> defaults " y cuando pongo la opcion salir del programa me sale
> "General protection exception" y se selecciona una linea del codigo
> del destructor.

Esto es más serio. Cuando tienes este tipo de avisos del sistema 
operativo, significa que el problema involucra algún tipo de acceso de 
algún puntero o de memoria adjudicada.

>

[CORTE]

>
>    listautil::~listautil(){
> 	util* temp;
> 	util* ant;
>
> 	temp=new util();
> 	ant=new util();

Esto no tiene sentido. Recuerda que estamos usando el destructor para 
"limpiar" los datos antes de que este objeto se libere. En nuestro caso, 
queremos liberar memoria dinámicamente. Por lo tanto, no tiene mucho 
sentido crear memoria dinámicamente, para poder liberar otra memoria.

> 	ant=cab;
> 	 temp = cab->sgte;
> 	 while(temp!=NULL)

En C++, usao 0 (cero) para indicar un puntero nulo, aunque si usas TC++, 
quizá te interese seguir usando 'NULL'.

También piensa en la posibilidad de que 'cab' sea nulo. De lo 
constrario, crearás un problema de acceso a un puntero nulo al intentar 
asignar el siguiente nodo a 'temp'.

> 	  {
>
>
> 		  delete ant;
> 			  ant = temp;
> 			temp=temp->sgte;
>
> 	  }
>

Otra solución es usar el puntero 'cab' y así te ahorras crear el puntero 
'temp'. Para un ejemplo, consulta el ejemplo de C++ del capítulo 1 del 
cusro de "Estructuras Dinámicas de Datos". Puedes iri directamente a: 
http://c.conclase.net/edd/index.php?cap=001g#1_10


Espero que todo esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase