Permalänk
Medlem

AccessViolationException i C#

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Är ett fel jag kämpat med det senaste dygnet.

Ni får ursäkta den noob man är, men jag har skurit ner på min kod tills jag fått obäket nedan.

static void Main(string[] args) { for (int i = 0; i < 50; i++) { XmlDocument doc = new XmlDocument(); doc.Load("http://www.domain.com/avgift.php"); XmlNodeList xl = doc.GetElementsByTagName("pris"); Console.WriteLine(xl[0].InnerText); Console.ReadKey(); } }

Koden hämtar data ur en xmlfil. Det fungerar en gång, men så fort jag försöker upprepa det så krashar eländet med AcessViolationException (varav for-loopen).
Det borde ju vara nån hur enkel grej som helst. Tacksam för all hjälp.

XML-filen ser ut så här:

<?xml version="1.0"?> <avgift> <pris>150</pris> </avgift>

Permalänk
Medlem

Om jag använder en lokal fil istället för din .php fil (som är i xml format?) så går det utan problem igenom loopen.
Läser du verkligen in en .xml fil ?

static void Main ( string [ ] args ) { for ( int i = 0; i < 50; i++ ) { XmlDocument doc = new XmlDocument ( ); doc.Load ( "local_xml_file.xml" ); XmlNodeList xl = doc.GetElementsByTagName ( "pris" ); Console.WriteLine ( xl [ 0 ].InnerText ); Console.ReadKey ( ); } }

Permalänk
Medlem

Tack för du tog dig tiden att titta på det!

Det är en php fil som genererar xml. Har kört den genom flera validatorer och det är ju 3 rader xml, så svårt att misslyckas med. Men det kvittar vad jag läser in. Men, precis som du, så har jag nu testat med en lokal fil och det fungerar fint (!). Så jag inbillar mig att det är någon säkerhetsgrej mot att ta ner externa filer.

Jag har också försökt med

using system.net;
WebClient wc = new WebClient();
wc.DownloadFile("http://www.domain.net/fil.txt");

Och det krashar precis likadant. Jag menar, kan jag göra programmet enklare? Missar jag något fundamentalt?
Jag kopierar 3 enkla rader från en enkel tutorial om att läsa filer från nätet och det krashar ändå, så jag tror nu att det har med min windowsinstallation att göra. Jag har stängt av och avinstallerat antivirus och testat utan skillnad.

Men tack för hjälpen, alla tips uppskattas.

Permalänk
Medlem

Öppnar du inte xml documentet varje gång och då eftersom det redan är öppet blir det konstigt ? jag vet att med vanliga filer i C# måste man stänga ner dom efter man har läst/skrivit men jag vet inte hur XML funkar

Visa signatur

Amd 1055T @ 3.5ghz | Corsair 16382mb 1600 MHz 9-9-9-24 | MSI GeForce 680| Asus M5a88-M | Intel 330 120GBx2 + WD 500GB Green + WD 1000GB Black + WD 2000GB Green x2 | AX 850 | Windows 7PRO x64 | Define R3 White

Permalänk
Medlem

Skulle också tippa på att det är någon .Close() som fattas i slutet av den loopen. Dock inte säker men känns som att det är där problemet ligger

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk
Medlem

Jag tror jag kanske möjligtvis fått det att fungera nu.
Jag trodde jag prövat alla sorter med close och dispose på precis varenda objekt.

Men nu kör jag med en XmlReader och avslutar med
reader.Close();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForFullGCComplete();

Antar att det är redig overkill, men det verkar fungera i alla fall.

Hur som helst, tack så mycket. Ovärderligt med ett bra bollplank när man sitter fast.