<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418644&amp;view=findpost&amp;p=3830879</guid>
        <pubDate>Thu, 14 May 2020 14:52:56 +0000</pubDate>
        <title>Как поправить exception ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=418644&amp;view=findpost&amp;p=3830879</link>
        <description><![CDATA[amigot: Добрый день&#33;<br>
После вылета exceptiona из-за memory access violation не создаётся новая страница и запись не продолжается....<br>
Падает после окончания/записи char элемента на long long элементе,срабатывает исключение но там lpvResult 0000 и отрабатывает неправильно на кейс ==NULL<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; arraySize; i++)//char=1(8),long long=8(64) together 9</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;__try {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lpNextPage = lpVirtualAddress;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*(char*)(lpVirtualAddress) = *alphabet;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(DWORD&amp;)lpVirtualAddress += sizeof(char);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int size = sizeof(char);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; alphabet[i % alphabetSize] &#60;&#60; &quot;(&quot; &#60;&#60; lpVirtualAddress &#60;&#60; &quot;)&quot; &#60;&#60; &quot;, &quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*(long long*)(lpVirtualAddress) = *array;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(DWORD&amp;)lpVirtualAddress += sizeof(long long);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;size += sizeof(long long);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; array[i] &#60;&#60; &quot;(&quot; &#60;&#60; lpVirtualAddress &#60;&#60; &quot;)&quot; &#60;&#60; &quot;, &quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;__except (PageFaultExceptionFilter(GetExceptionCode()))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;Error! %s!\n&quot;, (LPSTR)GetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">INT PageFaultExceptionFilter(DWORD dwCode)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;(DWORD&amp;)lpNextPage += si.dwPageSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (dwCode != EXCEPTION_ACCESS_VIOLATION)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf((&quot;Exception code = %d.\n&quot;), dwCode);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return EXCEPTION_EXECUTE_HANDLER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;Exception is a page fault.\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpvResult = VirtualAlloc(lpNextPage, pageSize, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (lpvResult == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot; Next page:&quot; &#60;&#60; lpNextPage &#60;&#60; endl;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot; Size of &nbsp;page:&quot; &#60;&#60; pageSize &#60;&#60; endl;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot; lpvResult &nbsp;:&quot; &#60;&#60; lpvResult &#60;&#60; endl;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;PageFaultExceptionFilter &nbsp;:Type &nbsp; - &nbsp;VirtualAlloc failed.\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return EXCEPTION_EXECUTE_HANDLER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else { printf(&quot;Allocating another page.\n&quot;); }</div><div class="code_line">&nbsp;&nbsp; &nbsp;//pageCounter++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return EXCEPTION_CONTINUE_EXECUTION;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Буду рад любой помощи.]]></description>
        <author>amigot</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	