Página 1 de 1

Menssagem de Error no Clipper

Enviado: 30 Dez 2004 15:46
por marbio
Boa Tarde Colegas!!!

Estou com um problema no CLIPPER 5.3 usando o Exospace, esta dando a seguente mensagem :

(b)FieldWBLOC(0) Unrecoverable error 650: Processos Stack Foult

isso aconte com frequencia ex:

Usando um funcao para pesquisa de produtos a funcao e feita com o dbedit.

na hora que estou usando as teclas de funcao F2 etc.

Preciso urgente disso

t+
Marbio

Enviado: 30 Dez 2004 16:03
por Dudu_XBase
Já resolvi esse problema simplesmente linkando esse obj junto.

http://geocities.yahoo.com.br/dudu_xbase/__wait_b.zip

Por que acontece isso

Enviado: 31 Dez 2004 10:52
por marbio
Bom dia !!!

Tem como vc me explicar por que que acontece isso, em qualquer sistema
no MS-DOS, WIN98 etc...

fico muito agradecido

t+
Marbio

Enviado: 31 Dez 2004 11:53
por Dudu_XBase
Marbio comecei a ter esse problema qdo começaram a surgir processadores mais potentes, mas vi tb outros problemas relacionados a esse erro com forma de compilação e linkedição, já vi esse erro ser eliminado qdo linkado com o blinker versão 7.0, e tb qdo migrado de versão de clipper 5.01 para 5.2 ou 5.3 esse erro sumir.
Já vi programadores dizerem q eh por causa de funções sem finalização vc montar uma função ou procedure e não colocar o return no final.

Enviado: 31 Dez 2004 23:48
por evolver
Processor Stack Fault - Geralmente isso ocorre por estouro de pilha. Normalmente a pessoa está usando uma função recursiva. Ou seja ela fica chamando a si mesma ou duas funções que uma chama a outra continuamente.

Explico: (explicação pra novatos, não critiquem)
A pilha é um método pelo qual um programa guarda aonde está a função anterior de modo que o return pode retornar ao ponto onde o programa estava quando uma função é chamada. Quando uma função fica chamando a outra ou uma função fica se chamando continuamente ocorre que essa pilha se enche e ocorre um estouro de pilha.

Os casos de função que ficam se chamando são similares a esses
- Funções se chamando recursivamente
func funcao1()
v_variavel=funcao2()
return v_variavel

func funcao2()
v_variavel2=funcao1()
return v_variavel2
- Função recursiva
func funcao1()
v_variavel=funcao1()

A melhor forma de descobrir onde está dando a recursividade é usando o CLD pra depurar o programa e o porque isso ocorre.