Mensajes: 1,161
Temas: 414
Gracias Recibidas: 292 en 212 posts
Gracias Dadas: 189
Registro en: Jul 2020
10-10-2022, 15:11
(Última modificación: 10-10-2022, 16:05 por
Shell.)
Buenas!.
Estoy ejecutando un test y me devuelve violación de segmento rápidamente. A ver como se depura eso.
Es un error en tiempo de ejecución.
Os adjunto el código. Lo primero que se me ocurre es que el array crece y crece.
GAMBAS
ObtenerNomArchivos(ruta)
archivos
= Dir(directorio,
"*.*", gb.
File) TestBenchMark("ObtenerExtensiones", archivos)
TestBenchMark("ObtenerExtensiones2", archivos)
Object.
Call(ob, nombrefuncion, aelementos
)
Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion
& " = " & "\t";
Format(Timer - t,
"0.######") & "s" & "\t"
extension
= Mid(nombref, pos
+ 1) aextensiones.Add(extension)
extension
= File.
Ext(nombref
)
En la primera función no uso el componente gb.util y en el siguiente si. Casi me da igual en resultado por eso lo del test.
Por otra parte nadie recibe el valor devuelto por la función. Que podría ser un procedimiento que no devuelva valor.
De un post explicado que es y con el lenguaje "C"..yikes! ..es broma.
¿Qué significa Violacion de Segmento?
Algo común: Se produce cuando...
Cita:- Intentar acceder una variable que ya fue liberada.
- Intentar escribir sobre una variable de solo lectura. ( No se da el caso , no es una propiedad ).
El error se produce en Object.Call desde la primera vez.
"El buen perfume en frasco pequeño se vende"
Mensajes: 1,161
Temas: 414
Gracias Recibidas: 292 en 212 posts
Gracias Dadas: 189
Registro en: Jul 2020
10-10-2022, 16:16
(Última modificación: 10-10-2022, 16:33 por
Shell.)
El problema es:
- Se debe asignar el valor devuelto por Object.Call a una variable.
Y la forma de llamarse.
GAMBAS
valores
= Object.
Call(ob, nombrefuncion,
[aelementos
])
Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion
& " = " & "\t";
Format(Timer - t,
"0.######") & "s" & "\t"
Pero lo cierto es que aelementos ya es un array.
Al final he dejado la función TestBenchmark de esta forma:
GAMBAS
maximo = 1000
valores
= Object.
Call(ob, nombrefuncion,
[aelementos
])
Print "Tiempo para " & Str(maximo
) & " repeticiones, sobre " & Str(aelementos.
Length) & " elementos. Usando " & "método: " & nombrefuncion
& " = " & "\t";
Format(Timer - t,
"0.######") & "s" & "\t"
Es que tantas iteraciones eran demasiadas.
La respuesta fue:
Cita:
Tiempo para 1000 repeticiones, sobre 9970 elementos. Usando método: ObtenerExtensiones = 1,041783s
Tiempo para 1000 repeticiones, sobre 9970 elementos. Usando método: ObtenerExtensiones2 = 1,360042s
Vamos, que es mejor usar el método que he definido que el que usa gb.Util para este método concreto.
Si tenéis una ruta con tropecientos archivos y distintas extensiones os funcionará.
Si son pocos igual. Mi problema es que de esos 9970 por lo menos existían 19 extensiones.
"El buen perfume en frasco pequeño se vende"
Los siguientes 1 usuarios dice gracias a Shell por este post:1 usuarios dice Gracias! a Shell por este post
• Shordi
Mensajes: 320
Temas: 26
Gracias Recibidas: 70 en 57 posts
Gracias Dadas: 10
Registro en: Jul 2020
10-10-2022, 20:47
(Última modificación: 10-10-2022, 20:53 por
vuott.)
(10-10-2022, 16:16)Shell escribió: Pero lo cierto es que aelementos ya es un array. 
...en efecto el 3° parámetro formal aún quiere que el tipo de dato u objeto pasado se reduzca a un array.
Por lo tanto, si se pasa un array, tendrá que ser en este caso un array de... array.
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Los siguientes 1 usuarios dice gracias a vuott por este post:1 usuarios dice Gracias! a vuott por este post
• Shell
Mensajes: 320
Temas: 26
Gracias Recibidas: 70 en 57 posts
Gracias Dadas: 10
Registro en: Jul 2020
(10-10-2022, 20:47)vuott escribió: en este caso un array de... array
En efecto... mira este ejemplo:
GAMBAS
' ↑ ↑ bidimensional
c = [bb]
i = a[2] * 10000
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 1,161
Temas: 414
Gracias Recibidas: 292 en 212 posts
Gracias Dadas: 189
Registro en: Jul 2020
(10-10-2022, 23:04)vuott escribió: En efecto... mira este ejemplo:
Gracias, en el ejemplo se ve mejor.
"El buen perfume en frasco pequeño se vende"