webForumDet fria alternativet

variabelnamn

6 svar · 271 visningar · startad av henrikjohansson

henrikjohanssonMedlem sedan maj 2000360 inlägg
#1

Jag har en function som anropas på X antal ställen

function void tjo (string s)
{
//blaha
}

sen anropas den
string s1 = "1";
string s2 = "2";

tjo(s1);
tjo(s2);

går det att i tjo veta om det är s1 eller s2 som användes som inparameter?

eller måste man skicka med variabelnamnet som sträng?

SPiNMedlem sedan mars 20007 896 inlägg
#2

Dela upp din metod till två istället, en för s1 och en för s2. Att ha dubbel funktionalitet i en och samma metod bör man, enligt mig åtminstone, undvika.

henrikjohanssonMedlem sedan maj 2000360 inlägg
#3

det där var iofs bara ett exempel
Det är lite större än så.

Mitt verkliga problem är att jag anropar c++ dller..
dessa dller har alloc och free
jag glömmer att köra free på någon variabel och vill veta vilken...
Därför vill jag lista upp alla gånger som funktionen körs och med vilken variabel eller från vilken funktion.

GladhMedlem sedan maj 20012 812 inlägg
#4

Tror inte du kan det, funderade först på reflections på din inparameter, men då får du nog bara namnet på den och inte på den parameter som skickas in i funktionen.

Däremot så kan du använda dig av StackFrame för att skriva ut från vilken kod rad som din funktion blir kallad från.

Detta borde ju kunna hjälpa dig genom att sedan skriva ut just denna kodrad i en logfil och då kommer det ju stå

tjo(s1);

eller

tjo(s2);

i logfilen och det kanske räcker för dig. Tyvärr har jag upptäckte ett fel när jag har plockat ut linjenummer (har inte sett någon annan som har detta *arrrggghh*) men det är att om jag travaserar mig igenom stacken så får jag linje nummret på operationen efter mitt anrop till funktionen. Så om jag kallar på funktionen på rad 30, så kommer jag få tillbaka att det är på linje 31 som jag kallar på funktionen.

Om man däremot skapar en ny StackFrame och skickar med den till funktionen och plockar ut linjenummer från den, så får jag rätt rad. Störrigt och ingen hjälp att tillgå :(

- Magnus

henrikjohanssonMedlem sedan maj 2000360 inlägg
#5

ok..
hittade minnesläckan genom att gnugga geniknölen lite :)
det är ALLTID (oftast iaf) enkla fel.

PMedlem sedan jan. 20012 204 inlägg
#6

Gladh skrev:

Tror inte du kan det, funderade först på reflections på din inparameter, men då får du nog bara namnet på den och inte på den parameter som skickas in i funktionen.

Däremot så kan du använda dig av StackFrame för att skriva ut från vilken kod rad som din funktion blir kallad från.

Detta borde ju kunna hjälpa dig genom att sedan skriva ut just denna kodrad i en logfil och då kommer det ju stå

tjo(s1);

eller

tjo(s2);

i logfilen och det kanske räcker för dig. Tyvärr har jag upptäckte ett fel när jag har plockat ut linjenummer (har inte sett någon annan som har detta *arrrggghh*) men det är att om jag travaserar mig igenom stacken så får jag linje nummret på operationen efter mitt anrop till funktionen. Så om jag kallar på funktionen på rad 30, så kommer jag få tillbaka att det är på linje 31 som jag kallar på funktionen.

Om man däremot skapar en ny StackFrame och skickar med den till funktionen och plockar ut linjenummer från den, så får jag rätt rad. Störrigt och ingen hjälp att tillgå :(

- Magnus

Första raden är rad 0 så du får ta -1?

GladhMedlem sedan maj 20012 812 inlägg
#7

Första raden är rad 0 så du får ta -1?

Faktiskt inte, den skall ge tillbaka linjenummret som man gjorde sitt funktionsanrop. Det är helt oberoende om man börjar med rad 0 eller 1.

Tyvärr är det inte så enkelt att man bara kan ta -1. Eftersom den tar den rad som nästa operation står på, så om mitt anrop är på rad 30, och nästa operation är på rad 35 (har 4 tomma rader), så får jag tillbaka rad 35 och inte 31 eller 30 (som jag önskat), alltså kan jag inte bara ta -1 för då blir det ju rad 34 och det är inte mer rätt.

Visst kommer man träffa rätt fler gånger, eftersom man oftast har en ny operation på nästa rad, men det spelar ingen roll. Antingen får man perfektion eller så kan man lika bra leva med felen... :)

- Magnus

128 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)