[C con Clase] Problemas con un array

Armando B. VERA rdlmat en gmail.com
Jue Oct 16 21:56:35 CEST 2014


Todo proceso, al cargarse en la memoria para ser ejecutado, necesita saber
de antemano la cantidad de memoria que utilizará. Esta cantidad de memoria
se cuenta con números naturales, como se cuentan las personas. Hay 4
personas, 5, 6, etc, pero nunca habrá 6.3 personas. Con la cantidad de
memoria pasa algo parecido. Cada programa, cuando se carga en la memoria
principal pasa disponer de recursos  para su ejecución. Entre esos recursos
se cuentan espacios de la memoria donde se alojan las instrucciones del
programa, otro sector para los datos además de otros espacios donde se
almacenan en forma temporal algún resultado intermedio. Esto es así porque
un proceso (programa en ejecución) comparte el procesador con otros
procesos que compiten por el mismo. El planificador de procesos otorga
turno a cada proceso para que haga su trabajo, pero ese turno consiste en
una pequeña fracción de segundos tras lo cual debe ceder el procesador a
otro proceso. Normalmente un procesos pasa por tres estados antes de
terminar la tarea (en ejecución, bloqueado, en espera). Al momento de
cargarse en la memoria el procesos debe contar con los recursos para su
ejecución.
Como ya te han respondido varios, no puedes tener una variable para definir
el tamaño de un array, menos aún, que sea de tipo float.
Si quieres que funciones debes hacer algo parecido a esto

const int tamA=20;
const int tamB=10;

luego, en el programa usar algo como

float c[tamA][tamB];

Si de todas formas, no sabes la cantidad de memoria que requiere tu
programa porque se supone que ese datos se conoce recién en tiempo de
ejecución, lo correcto es utilizar memoria dinámica.

En C suele utilizarse malloc y free para reservar y liberar memoria en
tiempo de ejecución. En C++ se utilizan los operadores new (para reservar)
y delete (para liberar). Se desaconseja utilizar memoria dinámica de
entrada para aprender a utilizar array, me parece que esto se debería dar
es una etapa posterior.

Espero te aclare las dudas. A propósito, te dejo el enlace del curso donde
trata las memoria dinámicas, pero insisto que no es conveniente empezar por
allí.

http://c.conclase.net/curso/index.php?cap=013b#OP2_NewDelete


El 16 de octubre de 2014, 14:04, Samuel Díaz García <samueldg en arcoscom.com>
escribió:

> Si es C++ busca información sobre el template array o alguno de esos, te
> pueden a ayudar a que sea un array dinámico en tiempo de ejecución sin
> necesidad de quebrarte.
>
> Ahora bien, las alternativas estándares como malloc, alloc, etc....
> siempre han funcionado, funcionan y seguirán funcionando muy bien.
>
> Salu2
>
> El 16/10/14 16:49, d1cor escribió:
>
>  On Thu, 16 Oct 2014 15:31:28 +0200
>> marcelinux <marcelinator en gmail.com> wrote:
>>
>>  j> >
>>> j> > float a;
>>> j> > float b;
>>> j> >
>>> j> > float c[a][b];
>>> j> >
>>> j> > al compilar el código me sale el siguiente error: [Error] size of
>>> array
>>> j> > 'c' has non-integral type 'float'
>>> j> >
>>>
>>> Además, a y b tienen que se constantes.
>>> Mira: http://c.conclase.net/curso/index.php?cap=010#inicio
>>> Donde dice: Otro detalle muy importante es que cuando se declaran
>>> arrays, los valores para el número de elementos deben ser siempre
>>> constantes enteras. Nunca se puede usar una variable para definir el
>>> tamaño de un array.
>>>
>>
>> Lo dicho, agrego como dato adicional que los arreglos, como las
>> variables, de definen en tiempo de compilación, y es por ello que ya deben
>> poseer dimensiones fijas.
>>
>> Si lo que estás necesitando es que el arreglo sea definido en tiempo de
>> ejecución, por ejemplo, para que sus dimensiones sean ingresadas por el
>> usuario durante la ejecución del proceso, no podés utilizar arreglos,
>> deberías utilizar asignación dinámica de memoria (malloc, calloc, realloc,
>> free) y utilizar punteros de un determinado tipo dependiendo de tus
>> necesidades, con el fin de poder moverte, mediante aritmética de punteros,
>> por tu región reservada dinámicamente.
>>
>> Espero que sume.
>> Slds a todos!
>>
>> ----------------------------------------------------------------------
>> Ing. Diego Cordoba
>> GNU/Linux Instructor & Consultant
>> CLA Carrera Linux Argentina
>> LPI Linux Certified Professional
>> www.carreralinux.com.ar - www.diegocordoba.tk
>> ----------------------------------------------------------------------
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
> --
> Samuel Díaz García
> ArcosCom Wireless, S.L.U.
>
> CIF: B11828068
> Plaza de las Aguas, 2
> 11630 - Arcos de la Frontera
> Cadiz
>
> http://www.facebook.com/ArcosComWireless
> mailto:samueldg en arcoscom.com
>
> Móvil: 678 17 66 12
> Tlfn.: 956 70 13 15
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20141016/2af5147f/attachment.html>


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