logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[c++] Błąd chkstk.asm przy dużej tablicy w MS Visual C++ 2008 SP1 - jak naprawić?

Elektronik9 26 Maj 2011 01:16 1206 6
REKLAMA
  • #1 9545113
    Elektronik9
    Poziom 30  
    Posty: 1803
    Pomógł: 21
    Ocena: 195
    Witam, taki problem:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Chodzi o linijkę:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    i debuggowanie w MS Visual C++ Express Edition 2008 SP1 - podczas krokowania F11 wyrzuca się przy wejściu do funkcji GenUniformInitialize() - coś z chkstk.asm, zauważyłem, że jak zmniejszę rozmiar tablicy poniżej tysiąca to jest ok. Co jest grane? I jak to naprawić?
  • REKLAMA
  • #2 9545288
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    Pewnie za duży obiekt na stosie.
    Nazwa pliku sugeruje jakiś kod do sprawdzania stosu (check stack).
    int [5000] to jakieś 20KB stosu.
  • REKLAMA
  • #3 9545602
    Elektronik9
    Poziom 30  
    Posty: 1803
    Pomógł: 21
    Ocena: 195
    Da się coś z tym zrobić? Nie tak dawno robiłem programy z tablicami o wiele większymi i nie było problemu...

    Jak powiększyć rozmiar stosu w VC++ 2008 EE ?

    Dodano po 37 [minuty]:

    Przy krokowaniu za pomocą F11 i wejsciu do funckji pokazuje błąd:
    Cytat:
    There is no source code available for the current location.

    i deasemblacja odsyła do:
    --- f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\chkstk.asm

    Rozmiar stosu zwiększyłem w ustawieniach projektu do 10000000 i nic się nie zmieniło!

    Oto co wyrzuca Call Stack:
    Cytat:
    > symulka.exe!_chkstk() Line 69 Asm
    symulka.exe!GenUniformInitialize() Line 27 + 0xd bytes C++
    symulka.exe!main() Line 11 C++
    symulka.exe!__tmainCRTStartup() Line 586 + 0x19 bytes C
    symulka.exe!mainCRTStartup() Line 403 C


    Pomocy :)
  • REKLAMA
  • #4 9546164
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    Stos jest do zmiennych chwilowych o małym rozmiarze do większych używaj sterty.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Eagle
  • REKLAMA
  • #5 9546190
    Elektronik9
    Poziom 30  
    Posty: 1803
    Pomógł: 21
    Ocena: 195
    Zrobiłem tak, ale teraz pokazuje mi to samo, ale przy wychodzeniu z funkcji round(). Dlaczego?
  • #6 9546285
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    Konkretnie ten kod co podałeś wywala taki błąd czy coś wyciąłeś co nadpisuje stos i zmienne ?

    W/g mnie kod coś "zaokrągla" a z wynikiem i tak nic nie robi ;) zmienna temp.

    Cytat:

    > symulka.exe!_chkstk() Line 69 Asm
    symulka.exe!GenUniformInitialize() Line 27 + 0xd bytes C++
    symulka.exe!main() Line 11 C++
    symulka.exe!__tmainCRTStartup() Line 586 + 0x19 bytes C
    symulka.exe!mainCRTStartup() Line 403 C


    Tu nie jestem pewien ale "line 27" tyle linii nie ma twój soft. Więc problem może powodować coś czego tu nie pokazałeś.

    Eagle
  • #7 9700629
    Elektronik9
    Poziom 30  
    Posty: 1803
    Pomógł: 21
    Ocena: 195
    Ok dzięki. Problemem okazało się, że chciałem wchodzić "zbyt głęboko".

Podsumowanie tematu

✨ Użytkownik napotkał błąd chkstk.asm w MS Visual C++ 2008 SP1 podczas próby użycia dużej tablicy (5000 elementów) w funkcji GenUniformInitialize. Problemy z błędem wskazują na przekroczenie rozmiaru stosu, co jest potwierdzone przez odpowiedzi innych uczestników dyskusji. Sugerowano, aby zamiast dużych tablic na stosie, używać dynamicznej alokacji pamięci na stercie (np. za pomocą new i delete). Użytkownik próbował zwiększyć rozmiar stosu, ale problem nadal występował, co prowadziło do dalszych pytań o głębokość wywołań funkcji. Ostatecznie, problem został rozwiązany poprzez ograniczenie głębokości wywołań.
Wygenerowane przez model językowy.
REKLAMA