C pregunta!

E

ESN

Guest
El código numérico es de libro Recetas.Lo que yo no entiendo es la línea "return v-NL NR_END;".Por lo que sé malloc regresa al punto de almacenamiento asignados.¿Alguien puede explicarme esto.

* float vector (largo NL, NH largo)
/ * Asignar un vector de float con v rango subíndice [nl .. NH] * /
(
* float v;

v = (float *) malloc ((size_t) ((NH-NL 1 NR_END) * sizeof (float)));
if (v) nrerror ( "error de asignación en el vector ()");
return v-NL NR_END;
)

 
hola# define NR_END 1

NR_END es "por si acaso" a fin de no regresar 0Uther

 
Hola,

He tryed di este (NH = 10 y NL = 5):

# include <stdio.h>
# include <stdlib.h>void main (void) (float * v, * Paux;

v = (float *) malloc ((size_t) ((10-5 1 1) * sizeof (float)));

Paux = v-5 1;

* Paux = 1,0;

)Runing con raciones purificarla dice:

[E] ABW: límites de la matriz escribir en los principales sucesos (1)
Escritura de 4 bytes a 0x01331980 (4 bytes en 0x01331980 ilegal)
Dirección 0x01331980 es de 16 bytes antes del inicio del bloque de 28 bytes en 0x01331990
Dirección 0x01331980 apunta a un bloque malloc'd
Thread ID: 0x5b4
Error de ubicación
principal [teste.c: 16]
/ / Paux = v;
Paux = v-5 1;

=> * Paux = 1,0;

)
mainCRTStartup [crt0.c: 206]
Asignación de ubicación
malloc [dbgheap.c: 129]
principal [teste.c: 11]
mainCRTStartup [crt0.c: 206]Por lo tanto, creo que están equivocados, o el código que utiliza la función se incremente el puntero de la Liga Nacional.

NeuralC

 
Se trata de un simple vecter NR asignador de memoria de gama es el origen de la final de ese rountine

No se olvide también incluir la cabecera correcta y también la lib

 
Sé que el código es un simple vector de asignador de memoria de almacenamiento.Pero yo no entendía la línea "return v-NL NR_END;".malloc función asigna memoria y devuelve el puntero al comienzo de dicho bloque de memoria asignada, ¿no?¿Por qué tenemos que cambiar la posición del puntero restando NL NR_END?

 
Hola,

el sentido de NR_END se explica en las pp.940-941 de recetas numéricas en C (2 ª ed.)
2.
Unidad de vectores de desplazamiento.
En x1.2, nos describe cómo una unidad-BB vector desplazamiento [1 .. 4], podría serobtenidos a partir de cero-array b [0 .. 3] por el puntero bb operación aritmética = b-1.
Desde quepuntos de BB a una ubicación antes de b, bb [1] aborda el mismo elemento que b [0], y así sucesivamente.En rigor, este sistema no es bendecido por el estándar ANSI C.
El problemano es el hecho de que B-1 puntos para el almacenamiento no asignado: ubicación B-1 nunca se hace referenciasin un incremento de nuevo en la región asignada.
Más bien, el problema es que puedeocurrir en algunos casos raros (y probablemente sólo en una máquina segmentada) que la expresión b-1no tiene representación en todos.
Si esto ocurre, entonces no hay ninguna garantía de que la relación deb = (b-1) 1 se cumple.En la práctica, esto es mucho menos de un problema que se podría pensar.
No somos conscientes decualquier compilador o máquina en la que b = (BN) n deja de ser cierto para pequeñas entero n.
Incluso en unmáquina segmentados, lo que suele ocurrir es que el compilador de las tiendas de algunos (tal vez ilegal)representación de la BN, b andthat es n recoveredwhen se vuelve a añadir a esta representación.
Ellas rutinas de asignación de memoria en la primera edición de recetas numéricas en C, en uso de ancho desdeDe 1988, todos tienen este problema, y no hemos tenido ni un solo informe de su fracaso en esterespeto (a pesar de los muchos lectores que nos han dicho que en teoría podría fracasar).También hemos comunicado a los organismos de normalización de la conveniencia de la bendición de b = (BN) N (amenos por un rango de n, digamos n representable como de tipo corto) en una futura norma, ya queparece que no hay conflicto con los compiladores existentes en hacerlo.A pesar de la ausencia de cualquier experimental (en oposición a teórico) problema, hemosdado algunos pasos en esta edición para hacer de nuestro vector y las rutinas de la matriz de asignación más ANSI
conformes. En la lista que sigue, el NR_END parámetro se utiliza como una serie de espacio de almacenamiento adicionallugares asignados al comienzo de cada vector o bloque de la matriz, simplemente con el finde la mencionada referencia puntero de desplazamiento garantizado representable.Hemos establecido NR_END a un valor predeterminadovalor de 1.Esto tiene el efecto de hacer que todas las asignaciones de unidad de desplazamiento (por ejemplo, b = vector (1,7);With NR_END = 1, the numbero = matriz (1,128,1,128);) ser estrictamente compatible con ANSI.
Con NR_END = 1, el número dede lugares de almacenamiento de desecho es bastante insignificante.
Las asignaciones con otros desplazamientos a 1 (por ejemplo,b = vector (2,10)) están todavía en teoría no conforme, pero son prácticamente desconocidos en nuestrorutinas.
Si usted necesita para hacer estas asignaciones, puede que desee considerar el aumento del valorde NR_END (cabe señalar que los valores más grandes aumentar la cantidad de almacenamiento de desperdicio).
La función asigna memoria para una matriz con v suscripts desde nl a NH y devuelve un puntero a v [0], independientemente de la Liga Nacional.De esta manera, & v es equivalente a (v i), independientemente de la Liga Nacional.Se coloca un espacio de almacenamiento adicional de las variables NR_END al principio de la matriz.
WIth NR_END = 1 se tiene la intención de trabajar en cualquier máquina para los subíndices que van desde 0 (NL = 0, como es habitual en C) o de 1 (nl = 1, la unidad de vectores de desplazamiento que se utiliza en Matlab, por ejemplo).

Recuerdos

Z
[/ b]

 

Welcome to EDABoard.com

Sponsor

Back
Top