Pregunta

Sólo estoy jugando con un núcleo de arranque grub-C ++ en Visual Studio 2010.

He llegado al punto en el que tengo nuevo y borrar escrita y cosas tales como matrices de trabajo asignada dinámicamente. Puedo utilizar las listas de STL, por ejemplo. Puedo incluso ordenar ellos, después de escribir una rutina de establecimiento de memoria. El problema es cuando se utiliza el tipo std :: vector. Simplemente construir el vector envía el fuera de núcleo en la la tierra.

Es evidente que me falta una implementación de la función de algún tipo, pero yo mirado a través de la búsqueda de STL para él y llegó con las manos vacías. Se produce un error en el push_back:

vector<int> v;
v.push_back(1);

y desaparece en el éter.

Cualquier conjeturas en cuanto a lo que me falta?

Editar Sí, es el vector de int. Perdón por la confusion. No sólo eso, pero no es el constructor se produce un error en adelante, es una llamada a push_back.

¿Fue útil?

Solución

Según nuestro análisis anterior, la creación de un

std::vector<mySimpleStruct> v;

en lugar de un

std::vector<int> v;

parece funcionar correctamente. Esto debe significar que el problema es con algo que se realiza en la especialización de algunas funciones para std :: vector en su biblioteca de plantillas estándar. Estoy asumiendo que usted está familiarizado con la especialización de plantilla ya, pero en caso de que no lo son:

http://www.parashift.com/c++ -FAQ-lite / templates.html # faq-35.7

Además, una vez que haya descubierto que el verdadero problema es, ¿podría volver y publicar la respuesta aquí? Me tienes curiosidad por saber dónde está el verdadero problema ahora, además de la respuesta puede ser de utilidad para otros que tratan de construir sus propios núcleos del sistema operativo.

Otros consejos

puñalada en la oscuridad: ¿Tiene new[] y delete[] implementado? Una lista creará un elemento a la vez con new mientras que un vector es probable que destinar grandes bloques de memoria con new[].

¿Utiliza un asignador de costumbre o una predeterminada?

Es posible que trate de usar una medida solo para ver lo que las asignaciones del vector peforms que podría destruir su implementación del administrador de memoria (esto es probablemente lo que realmente falla).

Y sí, por favor, puesto atrás una vez a resolverlo -. Ayuda a todos los demás OSdevers por ahí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top