Run-Time Check Failure #2 - Stack around the variable 'ft' was corrupted

Тема в разделе "LANGS.C", создана пользователем CrawlUp, 6 сен 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Интернет говорит что это ошибка когда выходишь за границы массива, но в этой функции
    вообще перечисления массива не какого нет.
    Она подсчитывает строки в richedit документе, начиная с конца ориентируясь на знак перехода на новую строку.
    И такая ошибка в моей программе возникает регулярно в разных функциях, и всё бы ничего, её можно убрав галочку проскочить(хоть и задалбывает) но в одной из функции началась вообще вакханалия, переданная в неё строка через пару инструкций сама по себе изменяется, может причина в этих ошибках.
    Код (Text):
    1. int CalculateLine()
    2.     {
    3.         //struct
    4.         GETTEXTLENGTHEX gettextlength = { 0 };
    5.         FINDTEXTW ft= { 0 };
    6.  
    7.         gettextlength.codepage = 1200;
    8.         gettextlength.flags = GTL_DEFAULT;
    9.         DWORD PosEnd = SendMessageW(hRicheEdit, EM_GETTEXTLENGTHEX, (WPARAM)&gettextlength, 0);
    10.  
    11.         int CountString = 0;
    12.         ft.chrg.cpMax = 0;
    13.         ft.lpstrText = L"\r";
    14.         while (PosEnd != -1)
    15.         {
    16.             ft.chrg.cpMin = PosEnd;
    17.             PosEnd = SendMessageW(hRicheEdit, EM_FINDTEXTEXW, 0, (LPARAM)&ft);
    18.             CountString++;
    19.         }
    20.         return CountString;
    21.     }
    ошибка возникает на выходе из функции, когда происходит проверка
    call @_RTC_CheckStackVars@8​
     
  2. Prober

    Prober Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    43
    Из документации:
    EM_FINDTEXTEXW uses the FINDTEXTEXW structure, while EM_FINDTEXTW uses the FINDTEXTW structure. The difference is that EM_FINDTEXTEXW reports the range of text that was found.

    Windows думает, что работает со структурой большего размера, и меняет в ней последний элемент. Но по факту это изменение будет уже не внутри структуры, а за её пределами.
     
    Indy_, UbIvItS и CrawlUp нравится это.
  3. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    в точку!