Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ThePinkPanther

#31
Muchas gracias a los dos, me aclararón mis dudas ,me estaba volviendo un poco loco .  ;-) Saludos , un moderador puede cerrar este tema.
#32
Cita de: amchacon en 11 Mayo 2013, 01:57 AM
No aver, puedes declararlo así. Pero una vez creado no puedes redimensionarlo (con new sí, pero acuerdate antes de borrar los datos anteriores).

Además los array cogen memoria de la pila mientras que new coge memoria de la ram.

Para hacernos una idea, al ejecutar el programa. El SO le asigna un espacio de memoria al programa que se le dedomina "pila", puede ser alrededor de 2-10 mb. Esta memoria se va llenando de forma consecutiva, por lo que se puede crear elementos y borrar elementos de una forma rápida y sencilla. Todos los elementos básicos que crees (hasta los objetos) se meten en la pila.

Evidentemente, es muy probable que con 2 mb te quedes corto. Por lo que puedes pedirle al sistema operativo que te reserve memoria adicional (usando new). El sistema operativo "buscará" celdas sueltas en la memoria y te asignará lo que vayas necesitando. Evidentemente, tendremos que guardar la dirreción de la celda asignada, de ahí que haya que usar punteros.

Para hacernos una idea, prueba la siguiente sentencia:

Código (cpp) [Seleccionar]
int Cosita[1000000];

Esta sentencia probablemente fallará (aunque tengamos 4 gb de ram). En cambio si usamos new:

Código (cpp) [Seleccionar]
int* Cosita = new int[1000000];

Debería funcionar sin problemas.


Muchas gracias, eres un genio , entonces la diferencia es que todas las estructuras de datos ,que no sean declaradas con una función de asignación de memoria dinamica , o un operador que sirva para eso,se guardan en la pila?
y tambien que puedo reasignar el espacio cuando utilizo estas funciones/operadores y en caso contrario no?
#33
Cita de: amchacon en 11 Mayo 2013, 01:31 AM
En C++ se puede. En C también a partir del estándar C98.

Es un array de tamaño variable. Antiguamente las variables se creaban al principio de cada llave. Por lo que se necesitaba su tamaño antes de entrar.

Ahora cada variable puede crearse en cualquier línea de código y en cualquier momento.

PD: No da warning, a no ser que tengas un compilador obsoleto o tengas activado warnings de C estricto.

entonces, que sentido tiene new , si se puede declarar dinamicamente un arreglo en cualquier parte del programa utilizando este metodo.
#34
Cita de: Leo Gutiérrez. en 11 Mayo 2013, 00:46 AM
Se puede, pero debería darte un warning.

no tira nada de warning, yo que usaba new para cuando el usuario ingresaba la cantidad de elementos que el arreglo iva a dimensionar como es que se puede, en el libro que estuve leyendo dice , que para declara un arreglo hay que hacerlo con una constante numerica , q puede ser un numero ej vector[30] , o un #define elementos 255 , y despues vector[elementos]; ... ?
#35

#include <iostream>

using namespace std;

int main()
{
  int var;
    cin>>var;
    int x[var];
for(int i=0;i<var;i++)
{
  cout<<"Elemento " << i + 1 << " : " ; cin>>x[i];
  cout<<endl;
}

for(int i=0;i<var;i++)cout<<x[i]<<endl;

}



No era que para dimensionar un vector en tiempo de ejecución , se necesitaba reservar memoria dinamica ?? , como puede ser que dimensione un vector con una variable.
#37
Buenas, uso codeblock en ubuntu linux, y estaba aprendiendo a usar hilos y procesos , y cuando quiero crear un hilo con pthread_create() el codeblock me informa :

Referencia a 'pthread_create' sin definir.

estas son las librerias que incluyo en el proyecto :


#include <iostream>
#include <unistd.h> // necesaria para ejecutar fork()
#include <stdlib.h> // necesaria para ejecutar exit().
#include <pthread.h>


Esa funcion esta definida en
Citar<phread.h>
?? o , tengo que realizar algún especie de linkiado o cosas así , gracias de antemano. !
#38
Tal cual, o dimensionas los vectores de entrada como explica leo , o usas asignación de memoria, en este caso recomiendo asignación dinámica de memoria porque a priori no se sabe cuando datos va a ingresar el usuario al arreglo, y tampoco da para sobre-dimensionar el vector y no usar toda la memoria.

Me parece que si , se confundió tu profe.xD
#39
Cita de: andrex.125 en 10 Mayo 2013, 04:35 AM
ThePinkPanther

muchas gracias por la ayuda, ya comprendí un poco del operador new.
con respecto al ejemplo de la profesora ya me tocaría resolverlo con ella.

Muchas gracias.



De nada, puedes buscar en google, encuentras mucha referencia de como usar memoria dinámica, si haceme el favor,consúltale ese tema, y mándame un pm con lo que te respondio porque me sorprende. un saludo.
#40
Si la profesora te dio eso no tengo idea entonces, hasta donde tengo entendido , si queremos generar un arreglo de x elementos ingresados por el usuario , deberemos reservar memoria , y guardar la dirección de memoria de la primera posición de memoria donde empieza la memoria dinámica..

esto se consigue , con el operador new , en c++ , por ejemplo :

int a;
int *arreglo;
cin>>a;
arreglo=new int [a]; // donde a es la cantidad de elementos que va a formar el arreglo.

A lo que voy, es que no se puede dimensionar un vector en tiempo de ejecución al menos, que utilicemos asignación dinámica de memoria.
O por lo menos es lo que tengo entendido.


O yo estoy re loco y no veo algo, o tu profesora esta re loca y yo estoy cuerdo.