<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[unzählige unerklärliche abstürze]]></title><description><![CDATA[<p>ich muss für die schule bis donnerstag fertigmachen. allerdings habe ich an für mich unerklärlichen stellen abstürze. z.B. beim aufruf der funktionen Vokabel_eintragen und vokabeln_abfragen. hier ist mal die main.h und die main.cpp wenn ihr noch die defines.h und die rsrc.rc braucht, sagt bescheid^^</p>
<p>[cpp]#include&quot;Main.h&quot;<br />
App Program;<br />
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);<br />
vector&lt;string&gt; char_dividing(const string&amp; in);<br />
vector&lt;string&gt; dat;<br />
string Vokabeln;<br />
string buffer1;<br />
string buffer2;</p>
<p>App::App() //Konstruktorfunktion<br />
{<br />
strcpy(szClassName, &quot;Vokabeltrainer&quot;);<br />
}</p>
<p>App::~App() //Destruktorfunktion<br />
{<br />
}</p>
<p>HWND hWnd; // Window Handle<br />
MSG message; //Messages<br />
WNDCLASSEX wc; //Window class<br />
HMENU menu; // Menu Handle<br />
OPENFILENAME ofn = {}; //OpenFileName structure</p>
<p>int App::Vokabeldatei_erstellen()<br />
{<br />
GetSaveFileName(&amp;ofn);<br />
fstream voc(buf, ios::out);<br />
return 0 ;<br />
}</p>
<p>int App::Vokabeldatei_oeffnen()<br />
{<br />
GetOpenFileName(&amp;ofn);<br />
fstream voc(buf, ios::in);</p>
<p>while(! voc.eof())<br />
{<br />
voc&gt;&gt;tmp1;<br />
voc&gt;&gt;tmp2;<br />
vokabular.insert(pair&lt;string, string&gt; ( tmp1, tmp2));<br />
//Vokabeln = Vokabeln + tmp1 + &quot; = &quot; + tmp2 + &quot;\r\n&quot;;</p>
<p>}<br />
it = vokabular.begin();<br />
iter = vokabular.begin();<br />
iter++;<br />
while(iter != vokabular.end())<br />
{<br />
if(it-&gt;first == iter-&gt;first)<br />
{<br />
if(it-&gt;second==iter-&gt;second)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
it++;<br />
iter++;<br />
}</p>
<p>it = vokabular.begin();<br />
while(it != vokabular.end())<br />
{<br />
Vokabeln = Vokabeln + it-&gt;first + &quot; = &quot; + it-&gt;second +&quot;\r\n&quot;;<br />
it++;<br />
}</p>
<p>SetWindowText(GetDlgItem(hWnd, IDC_EDIT_1), Vokabeln.c_str());<br />
UpdateWindow(GetDlgItem(hWnd, IDC_EDIT_1));<br />
return 0;<br />
}</p>
<p>*<em>int App::Vokabel_eintragen()<br />
{<br />
Program.iLength1 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_2));<br />
Program.buffer1 = (char</em>) malloc(Program.iLength1 + 1);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_2), Program.buffer1, Program.iLength1 + 1);</p>
<p>Program.iLength2 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_3));<br />
Program.buffer2 = (char*) malloc(Program.iLength2 + 1);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_3), Program.buffer2, Program.iLength2 + 1);</p>
<p>for(int i; i &lt;= sizeof(Program.buffer2); i++)<br />
{<br />
if(Program.buffer2[i] == ' ' )<br />
{<br />
Program.buffer2[i] = '_';<br />
}<br />
}</p>
<p>dat = char_dividing(Program.buffer2);<br />
buffer1 = Program.buffer1;<br />
buffer2 = Program.buffer2;<br />
Vokabeln = Vokabeln + buffer1 + &quot; = &quot; + buffer2 + &quot;\r\n&quot;;<br />
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_1), Vokabeln.c_str());<br />
UpdateWindow(GetDlgItem(hWnd, IDC_EDIT_1));<br />
for(vector&lt;string&gt;::iterator iter=dat.begin();iter != dat.end();iter++)<br />
{<br />
vokabular.insert(pair&lt; string, string&gt; (buffer1, *iter));<br />
}</p>
<p>Program.buffer1 = NULL;<br />
Program.buffer2 = NULL;<br />
dat.clear();<br />
return 0;<br />
}**</p>
<p>**int App::Vokabeln_abfragen()<br />
{<br />
GetOpenFileName(&amp;ofn);<br />
ifstream voc(buf, ios::in);<br />
while(! voc.eof())<br />
{<br />
voc&gt;&gt;tmp1;<br />
voc&gt;&gt;tmp2;<br />
vokabular.insert(pair&lt;string, string&gt; (tmp1, tmp2));</p>
<p>}<br />
it = vokabular.begin();<br />
iter = vokabular.begin();<br />
iter++;<br />
while(iter != vokabular.end())<br />
{<br />
if(it-&gt;first == iter-&gt;first)<br />
{<br />
if(it-&gt;second==iter-&gt;second)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
it++;<br />
iter++;<br />
}<br />
while(!vokabular.empty())<br />
{<br />
srand( (unsigned)time( NULL ) );<br />
int iEintraege = vokabular.size();<br />
int zufall;<br />
zufall = (rand()%iEintraege) ;<br />
it = vokabular.begin();</p>
<p>for (int i = 0; i &lt; zufall; ++i)<br />
{<br />
++it;}<br />
pair&lt;string , string&gt;(it-&gt;first , it -&gt; second);<br />
string tmp3 = it-&gt;first; //zeile 125<br />
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_2), tmp3.c_str()); // zeile 126</p>
<p>Program.iLength2 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_3));<br />
Program.buffer2 = (char*) malloc(Program.iLength2);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_3), Program.buffer2, Program.iLength2);</p>
<p>it = vokabular.find(tmp3);<br />
unsigned int count = vokabular.count(tmp3);<br />
if(it == vokabular.end())<br />
{<br />
MessageBox(hWnd, &quot;Vokabel nicht Gefunden.&quot;, &quot;Fehler&quot;, MB_ICONWARNING | MB_OK);<br />
}</p>
<p>if( Program.buffer2 == it-&gt;second)<br />
{<br />
MessageBox(hWnd, &quot;Richtig!&quot;, &quot;Antwort&quot;, MB_ICONINFORMATION | MB_OK);<br />
for( it =vokabular.begin(); it != vokabular.end(); it++)<br />
{<br />
if( it-&gt;first == tmp3)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
}<br />
}</p>
<p>return 0;<br />
}**</p>
<p>int App::Vokabeldatei_speichern()<br />
{</p>
<p>GetSaveFileName(&amp;ofn);<br />
fstream voc(buf, ios::out);</p>
<p>for(it = vokabular.begin(); it != vokabular.end(); it++)<br />
{<br />
voc&lt;&lt;it-&gt;first&lt;&lt;&quot; &quot;&lt;&lt;it-&gt;second&lt;&lt;&quot;\n&quot;;<br />
}<br />
return 0;<br />
}</p>
<p>vector&lt;string&gt; char_dividing( const string&amp; in)<br />
{<br />
vector&lt;string&gt; erg;</p>
<p>for(string::const_iterator iter = in.begin(); iter != in.end(); iter++)<br />
{<br />
if(*iter == ',')<br />
{<br />
erg.push_back(Program.tmp);<br />
Program.tmp = &quot;&quot;;<br />
*iter++;<br />
}</p>
<p>else<br />
{<br />
Program.tmp += *iter;<br />
}<br />
}</p>
<p>erg.push_back(Program.tmp);<br />
Program.tmp = &quot;&quot;;<br />
return erg;<br />
}<br />
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)<br />
{</p>
<p>wc.hInstance = hInstance;<br />
wc.lpszClassName = Program.szClassName;<br />
wc.lpfnWndProc = WndProc;<br />
wc.style = CS_HREDRAW | CS_VREDRAW;<br />
wc.cbSize = sizeof(WNDCLASSEX);<br />
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hCursor = LoadCursor(NULL, IDC_ARROW);<br />
wc.lpszMenuName = NULL;<br />
wc.cbClsExtra = 0;<br />
wc.cbWndExtra = 0;<br />
wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;</p>
<p>if(!RegisterClassEx(&amp;wc))<br />
{<br />
return 0;<br />
}</p>
<p>ofn.lStructSize = sizeof(ofn);<br />
ofn.hwndOwner = hWnd;<br />
ofn.hInstance = hInstance;<br />
ofn.lpstrFilter = &quot;Vokabeldateien (<em>.voc)\0</em>.voc\0\0&quot;;<br />
ofn.lpstrFile = buf;<br />
ofn.nMaxFile = sizeof(buf) / sizeof(*buf);</p>
<p>hWnd = CreateWindowEx(<br />
WS_EX_CLIENTEDGE,<br />
Program.szClassName,<br />
&quot;Vokabeltrainer&quot;,<br />
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,<br />
CW_USEDEFAULT,<br />
CW_USEDEFAULT,<br />
600,<br />
400,<br />
NULL,<br />
NULL,<br />
hInstance,<br />
NULL);</p>
<p>ShowWindow(hWnd, iCmdShow);</p>
<p>menu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_MENU));<br />
SetMenu(hWnd, menu);<br />
//UpdateWindow(hWnd);</p>
<p>while (GetMessage (&amp;message, NULL, 0, 0))<br />
{<br />
TranslateMessage(&amp;message);<br />
DispatchMessage(&amp;message);<br />
}</p>
<p>return message.wParam;<br />
}</p>
<p>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />
{</p>
<p>static HBRUSH hBrush; //Brush für den schrifthintergrund<br />
static RECT rect; //Fenstergröße<br />
const char szUeberschrift1[] = &quot;Englische Vokabel:&quot;; // Überschrift für das eingabefelde der englischen vokabel<br />
const char szUeberschrift2[] = &quot;Deutsche Vokabel:&quot;; // Das selbe für die deutsche Vokabel<br />
const char szUeberschrift3[] = &quot;Inhalt der Vokabeldatei:&quot;; // jo, nomal für das dritte editfeld<br />
const char szUeberschrift4[] = &quot;Bereits abgefragte Vokabeln:&quot;; // &lt;-<br />
Program.optionen[0] = FALSE;<br />
<a href="//Program.optionen">//Program.optionen</a>[1] = FALSE;<br />
DWORD d;<br />
switch (message) {</p>
<p>case WM_SIZE:<br />
{<br />
rect.left = 0;<br />
rect.top = 0;<br />
rect.right = LOWORD(lParam);<br />
rect.bottom = HIWORD(lParam);<br />
return 0;<br />
}<br />
case WM_COMMAND:<br />
{<br />
switch (LOWORD(wParam))<br />
{<br />
case IDM_NEWVOK:<br />
{<br />
Program.Vokabeldatei_erstellen();<br />
break;<br />
}<br />
case IDM_OPENVOK:<br />
{<br />
Program.Vokabeldatei_oeffnen();<br />
break;</p>
<p>}<br />
case IDM_SAVEVOK:<br />
{<br />
Program.Vokabeldatei_speichern();<br />
break;</p>
<p>}<br />
case IDM_PRACTICEVOK:<br />
{<br />
Program.Vokabeln_abfragen();<br />
break;<br />
}<br />
case IDM_HELP:<br />
{<br />
MessageBox(hWnd, TEXT(&quot;Funktion noch nicht implementiert&quot;), TEXT(&quot;Vokabeltrainer&quot;), MB_OK | MB_ICONWARNING);<br />
} break;<br />
case IDM_\1:<br />
{<br />
MessageBox(NULL, TEXT(&quot;Vokabeltrainer\nCopyright bei Martin 'Arathorns Sohn' Alsfasser\nDark Grass Software\n<br />
Mit Tatkräftiger Unterstützung von Walljumper bei der Fehlerbeseitigung.&quot;), TEXT(&quot;Über das Programm&quot;), MB_OK | MB_ICONINFORMATION);<br />
} break;<br />
case IDM_EXIT:<br />
{<br />
PostQuitMessage(0);<br />
} break;<br />
}</p>
<p>if (lParam == (LPARAM)GetDlgItem(hWnd, IDC_BTN_INSERT)) {<br />
if (HIWORD(wParam) == BN_CLICKED) {<br />
Program.Vokabel_eintragen();</p>
<p>//MessageBox(NULL, TEXT(&quot;Funktion noch nicht implementiert&quot;), TEXT(&quot;Vokabeltrainer&quot;), MB_ICONWARNING | MB_OK);<br />
}</p>
<p>}</p>
<p>} break;</p>
<p>case WM_CTLCOLORSTATIC:<br />
{<br />
if ((HWND) lParam == GetDlgItem(hWnd, IDC_EDIT_1)) {<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return (LRESULT)hBrush;<br />
}<br />
SetBkMode((HDC)wParam, GetSysColor(COLOR_WINDOW));<br />
SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));<br />
return 0;<br />
}break;</p>
<p>case WM_CTLCOLOREDIT:<br />
{<br />
if((HWND)lParam == GetDlgItem(hWnd, IDC_EDIT_2))<br />
{<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return (LRESULT)hBrush;<br />
}<br />
if((HWND)lParam == GetDlgItem(hWnd, IDC_EDIT_3))<br />
{<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return(LRESULT)hBrush;<br />
}</p>
<p>}break;</p>
<p>case WM_CREATE:<br />
{<br />
hBrush = CreateSolidBrush(RGB(255, 255, 255));</p>
<p>if(CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE /<em>| ES_READONLY</em>/ | WS_VSCROLL |<br />
ES_AUTOVSCROLL | ES_MULTILINE | WS_HSCROLL | ES_AUTOHSCROLL, 310, 30, 270, 310, hWnd, (HMENU)IDC_EDIT_1, ((LPCREATESTRUCT)lParam)-&gt;hInstance,<br />
NULL) == NULL ||</p>
<p>CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE, 40, 70, 230, 22, hWnd, (HMENU)IDC_EDIT_2,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL ||</p>
<p>CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE, 40, 120, 230, 22, hWnd, (HMENU)IDC_EDIT_3,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL ||</p>
<p>CreateWindowEx( 0, TEXT(&quot;button&quot;), TEXT(&quot;Eintragen&quot;), WS_CHILD | WS_VISIBLE, 70, 150, 160, 22, hWnd, (HMENU)IDC_BTN_INSERT,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL)<br />
{<br />
return -1;<br />
}</p>
<p>UpdateWindow(hWnd);<br />
}break;</p>
<p>case WM_PAINT:<br />
{<br />
HDC hDC;<br />
PAINTSTRUCT ps;</p>
<p>hDC = BeginPaint(hWnd, &amp;ps);<br />
{<br />
SetBkMode(hDC, TRANSPARENT);<br />
TextOut(hDC, 40, 50, szUeberschrift1, sizeof(szUeberschrift1) - 1);<br />
TextOut(hDC, 40, 100, szUeberschrift2, sizeof(szUeberschrift2) - 1);<br />
if (Program.optionen[0] == TRUE)<br />
{<br />
TextOut(hDC, 310, 10, szUeberschrift4, sizeof(szUeberschrift4) - 1);<br />
}<br />
else if(Program.optionen[0] == FALSE)<br />
{<br />
TextOut(hDC, 310, 10, szUeberschrift3, sizeof(szUeberschrift3) - 1);<br />
}</p>
<p>}<br />
EndPaint(hWnd, &amp;ps);<br />
}break;</p>
<p>case WM_DESTROY:<br />
{<br />
if (hBrush) {<br />
DeleteObject(hBrush);<br />
}<br />
PostQuitMessage (0);<br />
break;<br />
}</p>
<p>}</p>
<p>return DefWindowProc(hWnd, message, wParam, lParam);<br />
}</p>
<p>[/cpp]</p>
<p>main.h</p>
<pre><code class="language-cpp">#include&lt;windows.h&gt;
#include&lt;map.h&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;fstream&gt;
#include&lt;cstdlib&gt;
#include&lt;ctime&gt;
#include&lt;time.h&gt;
#include&quot;defines.h&quot;
using namespace std;

TCHAR buf[MAX_PATH] = TEXT(&quot;&quot;);

class App         //Programm Klasse 
{
public:
	App();       //Konstruktor
	~App();      //Destruktor

	char szClassName[];                                           //Klassenname

	int Vokabeldatei_erstellen();                                   //Funktion zum erstellen einer Vokabeldatei
	int Vokabeldatei_oeffnen();                                   //Funktion zum erweitern einer Vokabeldatei
    int Vokabel_eintragen();                                      //Funktion um Vokabeln in eine datei einzutragen
	int Vokabeln_abfragen();                                        //Funktion zum abfragen von Vokabeln aus einer Vokabeldatei
    int Vokabeldatei_speichern();                                 //Funkltion zum spichern der Voakbeldatei  

	unsigned long Error;
	bool optionen[10]; //0 = Vokabeln abfragen? 1 = speichern?, 2, 3, 4, 5, 6, 7, 8, 9, 10 = unbelegt
	string tmp;
	string tmp1;
	string tmp2;
	//string tmp3;

private:
   multimap&lt;string, string&gt; vokabular;
   multimap&lt;string, string&gt;::iterator it;
   multimap&lt;string, string&gt;::iterator iter;
   char* buffer1;                     //Buffer Englische Vokabel
   int iLength1;                         //Länge Englische Vokabel
   char* buffer2;                     //Buffer deutsche Vokabel
   int iLength2;                         //Länge deutsche Vokabel

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/202582/unzählige-unerklärliche-abstürze</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 21:11:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202582.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jan 2008 10:17:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 12:20:18 GMT]]></title><description><![CDATA[<p>ich muss für die schule bis donnerstag fertigmachen. allerdings habe ich an für mich unerklärlichen stellen abstürze. z.B. beim aufruf der funktionen Vokabel_eintragen und vokabeln_abfragen. hier ist mal die main.h und die main.cpp wenn ihr noch die defines.h und die rsrc.rc braucht, sagt bescheid^^</p>
<p>[cpp]#include&quot;Main.h&quot;<br />
App Program;<br />
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);<br />
vector&lt;string&gt; char_dividing(const string&amp; in);<br />
vector&lt;string&gt; dat;<br />
string Vokabeln;<br />
string buffer1;<br />
string buffer2;</p>
<p>App::App() //Konstruktorfunktion<br />
{<br />
strcpy(szClassName, &quot;Vokabeltrainer&quot;);<br />
}</p>
<p>App::~App() //Destruktorfunktion<br />
{<br />
}</p>
<p>HWND hWnd; // Window Handle<br />
MSG message; //Messages<br />
WNDCLASSEX wc; //Window class<br />
HMENU menu; // Menu Handle<br />
OPENFILENAME ofn = {}; //OpenFileName structure</p>
<p>int App::Vokabeldatei_erstellen()<br />
{<br />
GetSaveFileName(&amp;ofn);<br />
fstream voc(buf, ios::out);<br />
return 0 ;<br />
}</p>
<p>int App::Vokabeldatei_oeffnen()<br />
{<br />
GetOpenFileName(&amp;ofn);<br />
fstream voc(buf, ios::in);</p>
<p>while(! voc.eof())<br />
{<br />
voc&gt;&gt;tmp1;<br />
voc&gt;&gt;tmp2;<br />
vokabular.insert(pair&lt;string, string&gt; ( tmp1, tmp2));<br />
//Vokabeln = Vokabeln + tmp1 + &quot; = &quot; + tmp2 + &quot;\r\n&quot;;</p>
<p>}<br />
it = vokabular.begin();<br />
iter = vokabular.begin();<br />
iter++;<br />
while(iter != vokabular.end())<br />
{<br />
if(it-&gt;first == iter-&gt;first)<br />
{<br />
if(it-&gt;second==iter-&gt;second)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
it++;<br />
iter++;<br />
}</p>
<p>it = vokabular.begin();<br />
while(it != vokabular.end())<br />
{<br />
Vokabeln = Vokabeln + it-&gt;first + &quot; = &quot; + it-&gt;second +&quot;\r\n&quot;;<br />
it++;<br />
}</p>
<p>SetWindowText(GetDlgItem(hWnd, IDC_EDIT_1), Vokabeln.c_str());<br />
UpdateWindow(GetDlgItem(hWnd, IDC_EDIT_1));<br />
return 0;<br />
}</p>
<p>*<em>int App::Vokabel_eintragen()<br />
{<br />
Program.iLength1 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_2));<br />
Program.buffer1 = (char</em>) malloc(Program.iLength1 + 1);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_2), Program.buffer1, Program.iLength1 + 1);</p>
<p>Program.iLength2 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_3));<br />
Program.buffer2 = (char*) malloc(Program.iLength2 + 1);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_3), Program.buffer2, Program.iLength2 + 1);</p>
<p>for(int i; i &lt;= sizeof(Program.buffer2); i++)<br />
{<br />
if(Program.buffer2[i] == ' ' )<br />
{<br />
Program.buffer2[i] = '_';<br />
}<br />
}</p>
<p>dat = char_dividing(Program.buffer2);<br />
buffer1 = Program.buffer1;<br />
buffer2 = Program.buffer2;<br />
Vokabeln = Vokabeln + buffer1 + &quot; = &quot; + buffer2 + &quot;\r\n&quot;;<br />
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_1), Vokabeln.c_str());<br />
UpdateWindow(GetDlgItem(hWnd, IDC_EDIT_1));<br />
for(vector&lt;string&gt;::iterator iter=dat.begin();iter != dat.end();iter++)<br />
{<br />
vokabular.insert(pair&lt; string, string&gt; (buffer1, *iter));<br />
}</p>
<p>Program.buffer1 = NULL;<br />
Program.buffer2 = NULL;<br />
dat.clear();<br />
return 0;<br />
}**</p>
<p>**int App::Vokabeln_abfragen()<br />
{<br />
GetOpenFileName(&amp;ofn);<br />
ifstream voc(buf, ios::in);<br />
while(! voc.eof())<br />
{<br />
voc&gt;&gt;tmp1;<br />
voc&gt;&gt;tmp2;<br />
vokabular.insert(pair&lt;string, string&gt; (tmp1, tmp2));</p>
<p>}<br />
it = vokabular.begin();<br />
iter = vokabular.begin();<br />
iter++;<br />
while(iter != vokabular.end())<br />
{<br />
if(it-&gt;first == iter-&gt;first)<br />
{<br />
if(it-&gt;second==iter-&gt;second)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
it++;<br />
iter++;<br />
}<br />
while(!vokabular.empty())<br />
{<br />
srand( (unsigned)time( NULL ) );<br />
int iEintraege = vokabular.size();<br />
int zufall;<br />
zufall = (rand()%iEintraege) ;<br />
it = vokabular.begin();</p>
<p>for (int i = 0; i &lt; zufall; ++i)<br />
{<br />
++it;}<br />
pair&lt;string , string&gt;(it-&gt;first , it -&gt; second);<br />
string tmp3 = it-&gt;first; //zeile 125<br />
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_2), tmp3.c_str()); // zeile 126</p>
<p>Program.iLength2 = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT_3));<br />
Program.buffer2 = (char*) malloc(Program.iLength2);<br />
GetWindowText(GetDlgItem(hWnd, IDC_EDIT_3), Program.buffer2, Program.iLength2);</p>
<p>it = vokabular.find(tmp3);<br />
unsigned int count = vokabular.count(tmp3);<br />
if(it == vokabular.end())<br />
{<br />
MessageBox(hWnd, &quot;Vokabel nicht Gefunden.&quot;, &quot;Fehler&quot;, MB_ICONWARNING | MB_OK);<br />
}</p>
<p>if( Program.buffer2 == it-&gt;second)<br />
{<br />
MessageBox(hWnd, &quot;Richtig!&quot;, &quot;Antwort&quot;, MB_ICONINFORMATION | MB_OK);<br />
for( it =vokabular.begin(); it != vokabular.end(); it++)<br />
{<br />
if( it-&gt;first == tmp3)<br />
{<br />
vokabular.erase(it);<br />
}<br />
}<br />
}<br />
}</p>
<p>return 0;<br />
}**</p>
<p>int App::Vokabeldatei_speichern()<br />
{</p>
<p>GetSaveFileName(&amp;ofn);<br />
fstream voc(buf, ios::out);</p>
<p>for(it = vokabular.begin(); it != vokabular.end(); it++)<br />
{<br />
voc&lt;&lt;it-&gt;first&lt;&lt;&quot; &quot;&lt;&lt;it-&gt;second&lt;&lt;&quot;\n&quot;;<br />
}<br />
return 0;<br />
}</p>
<p>vector&lt;string&gt; char_dividing( const string&amp; in)<br />
{<br />
vector&lt;string&gt; erg;</p>
<p>for(string::const_iterator iter = in.begin(); iter != in.end(); iter++)<br />
{<br />
if(*iter == ',')<br />
{<br />
erg.push_back(Program.tmp);<br />
Program.tmp = &quot;&quot;;<br />
*iter++;<br />
}</p>
<p>else<br />
{<br />
Program.tmp += *iter;<br />
}<br />
}</p>
<p>erg.push_back(Program.tmp);<br />
Program.tmp = &quot;&quot;;<br />
return erg;<br />
}<br />
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)<br />
{</p>
<p>wc.hInstance = hInstance;<br />
wc.lpszClassName = Program.szClassName;<br />
wc.lpfnWndProc = WndProc;<br />
wc.style = CS_HREDRAW | CS_VREDRAW;<br />
wc.cbSize = sizeof(WNDCLASSEX);<br />
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hCursor = LoadCursor(NULL, IDC_ARROW);<br />
wc.lpszMenuName = NULL;<br />
wc.cbClsExtra = 0;<br />
wc.cbWndExtra = 0;<br />
wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;</p>
<p>if(!RegisterClassEx(&amp;wc))<br />
{<br />
return 0;<br />
}</p>
<p>ofn.lStructSize = sizeof(ofn);<br />
ofn.hwndOwner = hWnd;<br />
ofn.hInstance = hInstance;<br />
ofn.lpstrFilter = &quot;Vokabeldateien (<em>.voc)\0</em>.voc\0\0&quot;;<br />
ofn.lpstrFile = buf;<br />
ofn.nMaxFile = sizeof(buf) / sizeof(*buf);</p>
<p>hWnd = CreateWindowEx(<br />
WS_EX_CLIENTEDGE,<br />
Program.szClassName,<br />
&quot;Vokabeltrainer&quot;,<br />
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,<br />
CW_USEDEFAULT,<br />
CW_USEDEFAULT,<br />
600,<br />
400,<br />
NULL,<br />
NULL,<br />
hInstance,<br />
NULL);</p>
<p>ShowWindow(hWnd, iCmdShow);</p>
<p>menu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_MENU));<br />
SetMenu(hWnd, menu);<br />
//UpdateWindow(hWnd);</p>
<p>while (GetMessage (&amp;message, NULL, 0, 0))<br />
{<br />
TranslateMessage(&amp;message);<br />
DispatchMessage(&amp;message);<br />
}</p>
<p>return message.wParam;<br />
}</p>
<p>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />
{</p>
<p>static HBRUSH hBrush; //Brush für den schrifthintergrund<br />
static RECT rect; //Fenstergröße<br />
const char szUeberschrift1[] = &quot;Englische Vokabel:&quot;; // Überschrift für das eingabefelde der englischen vokabel<br />
const char szUeberschrift2[] = &quot;Deutsche Vokabel:&quot;; // Das selbe für die deutsche Vokabel<br />
const char szUeberschrift3[] = &quot;Inhalt der Vokabeldatei:&quot;; // jo, nomal für das dritte editfeld<br />
const char szUeberschrift4[] = &quot;Bereits abgefragte Vokabeln:&quot;; // &lt;-<br />
Program.optionen[0] = FALSE;<br />
<a href="//Program.optionen">//Program.optionen</a>[1] = FALSE;<br />
DWORD d;<br />
switch (message) {</p>
<p>case WM_SIZE:<br />
{<br />
rect.left = 0;<br />
rect.top = 0;<br />
rect.right = LOWORD(lParam);<br />
rect.bottom = HIWORD(lParam);<br />
return 0;<br />
}<br />
case WM_COMMAND:<br />
{<br />
switch (LOWORD(wParam))<br />
{<br />
case IDM_NEWVOK:<br />
{<br />
Program.Vokabeldatei_erstellen();<br />
break;<br />
}<br />
case IDM_OPENVOK:<br />
{<br />
Program.Vokabeldatei_oeffnen();<br />
break;</p>
<p>}<br />
case IDM_SAVEVOK:<br />
{<br />
Program.Vokabeldatei_speichern();<br />
break;</p>
<p>}<br />
case IDM_PRACTICEVOK:<br />
{<br />
Program.Vokabeln_abfragen();<br />
break;<br />
}<br />
case IDM_HELP:<br />
{<br />
MessageBox(hWnd, TEXT(&quot;Funktion noch nicht implementiert&quot;), TEXT(&quot;Vokabeltrainer&quot;), MB_OK | MB_ICONWARNING);<br />
} break;<br />
case IDM_\1:<br />
{<br />
MessageBox(NULL, TEXT(&quot;Vokabeltrainer\nCopyright bei Martin 'Arathorns Sohn' Alsfasser\nDark Grass Software\n<br />
Mit Tatkräftiger Unterstützung von Walljumper bei der Fehlerbeseitigung.&quot;), TEXT(&quot;Über das Programm&quot;), MB_OK | MB_ICONINFORMATION);<br />
} break;<br />
case IDM_EXIT:<br />
{<br />
PostQuitMessage(0);<br />
} break;<br />
}</p>
<p>if (lParam == (LPARAM)GetDlgItem(hWnd, IDC_BTN_INSERT)) {<br />
if (HIWORD(wParam) == BN_CLICKED) {<br />
Program.Vokabel_eintragen();</p>
<p>//MessageBox(NULL, TEXT(&quot;Funktion noch nicht implementiert&quot;), TEXT(&quot;Vokabeltrainer&quot;), MB_ICONWARNING | MB_OK);<br />
}</p>
<p>}</p>
<p>} break;</p>
<p>case WM_CTLCOLORSTATIC:<br />
{<br />
if ((HWND) lParam == GetDlgItem(hWnd, IDC_EDIT_1)) {<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return (LRESULT)hBrush;<br />
}<br />
SetBkMode((HDC)wParam, GetSysColor(COLOR_WINDOW));<br />
SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));<br />
return 0;<br />
}break;</p>
<p>case WM_CTLCOLOREDIT:<br />
{<br />
if((HWND)lParam == GetDlgItem(hWnd, IDC_EDIT_2))<br />
{<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return (LRESULT)hBrush;<br />
}<br />
if((HWND)lParam == GetDlgItem(hWnd, IDC_EDIT_3))<br />
{<br />
SetBkColor((HDC)wParam, RGB(255, 255, 255));<br />
return(LRESULT)hBrush;<br />
}</p>
<p>}break;</p>
<p>case WM_CREATE:<br />
{<br />
hBrush = CreateSolidBrush(RGB(255, 255, 255));</p>
<p>if(CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE /<em>| ES_READONLY</em>/ | WS_VSCROLL |<br />
ES_AUTOVSCROLL | ES_MULTILINE | WS_HSCROLL | ES_AUTOHSCROLL, 310, 30, 270, 310, hWnd, (HMENU)IDC_EDIT_1, ((LPCREATESTRUCT)lParam)-&gt;hInstance,<br />
NULL) == NULL ||</p>
<p>CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE, 40, 70, 230, 22, hWnd, (HMENU)IDC_EDIT_2,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL ||</p>
<p>CreateWindowEx( WS_EX_CLIENTEDGE, TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_VISIBLE, 40, 120, 230, 22, hWnd, (HMENU)IDC_EDIT_3,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL ||</p>
<p>CreateWindowEx( 0, TEXT(&quot;button&quot;), TEXT(&quot;Eintragen&quot;), WS_CHILD | WS_VISIBLE, 70, 150, 160, 22, hWnd, (HMENU)IDC_BTN_INSERT,<br />
((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL) == NULL)<br />
{<br />
return -1;<br />
}</p>
<p>UpdateWindow(hWnd);<br />
}break;</p>
<p>case WM_PAINT:<br />
{<br />
HDC hDC;<br />
PAINTSTRUCT ps;</p>
<p>hDC = BeginPaint(hWnd, &amp;ps);<br />
{<br />
SetBkMode(hDC, TRANSPARENT);<br />
TextOut(hDC, 40, 50, szUeberschrift1, sizeof(szUeberschrift1) - 1);<br />
TextOut(hDC, 40, 100, szUeberschrift2, sizeof(szUeberschrift2) - 1);<br />
if (Program.optionen[0] == TRUE)<br />
{<br />
TextOut(hDC, 310, 10, szUeberschrift4, sizeof(szUeberschrift4) - 1);<br />
}<br />
else if(Program.optionen[0] == FALSE)<br />
{<br />
TextOut(hDC, 310, 10, szUeberschrift3, sizeof(szUeberschrift3) - 1);<br />
}</p>
<p>}<br />
EndPaint(hWnd, &amp;ps);<br />
}break;</p>
<p>case WM_DESTROY:<br />
{<br />
if (hBrush) {<br />
DeleteObject(hBrush);<br />
}<br />
PostQuitMessage (0);<br />
break;<br />
}</p>
<p>}</p>
<p>return DefWindowProc(hWnd, message, wParam, lParam);<br />
}</p>
<p>[/cpp]</p>
<p>main.h</p>
<pre><code class="language-cpp">#include&lt;windows.h&gt;
#include&lt;map.h&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;fstream&gt;
#include&lt;cstdlib&gt;
#include&lt;ctime&gt;
#include&lt;time.h&gt;
#include&quot;defines.h&quot;
using namespace std;

TCHAR buf[MAX_PATH] = TEXT(&quot;&quot;);

class App         //Programm Klasse 
{
public:
	App();       //Konstruktor
	~App();      //Destruktor

	char szClassName[];                                           //Klassenname

	int Vokabeldatei_erstellen();                                   //Funktion zum erstellen einer Vokabeldatei
	int Vokabeldatei_oeffnen();                                   //Funktion zum erweitern einer Vokabeldatei
    int Vokabel_eintragen();                                      //Funktion um Vokabeln in eine datei einzutragen
	int Vokabeln_abfragen();                                        //Funktion zum abfragen von Vokabeln aus einer Vokabeldatei
    int Vokabeldatei_speichern();                                 //Funkltion zum spichern der Voakbeldatei  

	unsigned long Error;
	bool optionen[10]; //0 = Vokabeln abfragen? 1 = speichern?, 2, 3, 4, 5, 6, 7, 8, 9, 10 = unbelegt
	string tmp;
	string tmp1;
	string tmp2;
	//string tmp3;

private:
   multimap&lt;string, string&gt; vokabular;
   multimap&lt;string, string&gt;::iterator it;
   multimap&lt;string, string&gt;::iterator iter;
   char* buffer1;                     //Buffer Englische Vokabel
   int iLength1;                         //Länge Englische Vokabel
   char* buffer2;                     //Buffer deutsche Vokabel
   int iLength2;                         //Länge deutsche Vokabel

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1435770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435770</guid><dc:creator><![CDATA[Arathorns Sohn]]></dc:creator><pubDate>Sun, 13 Jan 2008 12:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 10:22:50 GMT]]></title><description><![CDATA[<p>ok bevor ich dein halbes counterstrike durchlese <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> um einen fehler zu finden,<br />
von dem ich nichtmal weiß von welcher natur er ist.<br />
poste bitte mit welchem fehler es abstürzt, und grenze den bereich von<br />
vornherein ein, in dem er auftritt (benutze den debugger und führe den<br />
code schritt für schritt aus, oder arbeite mit breakpoints). DANN<br />
markiere den bereich <strong>fett</strong> in dem der fehler auftritt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435772</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sun, 13 Jan 2008 10:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 10:54:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich kann nicht alle Fehler finden, ist einfach sehr unübersichtlich: einige sind mir jedoch aufgefallen:</p>
<p>1. Benutze new / delete und nicht malloc / free<br />
2. Wenn Du dynamischen Speicher anfoderst (mit new oder den c- varianten) musst du den Speicher wieder freigeben (mit delete bzw. den c- varianten).<br />
3. Benutze doch std::make_pair(...) um std::pair&lt;..&gt; zu erzeugen.<br />
<a href="http://msdn2.microsoft.com/en-us/library/be52dt00(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/be52dt00(VS.80).aspx</a><br />
(Ist nur ein Vorschlag).</p>
<p>Ansonsten ist das schon ziemlich chaotisch.<br />
Gruss Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435786</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Sun, 13 Jan 2008 10:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 12:22:56 GMT]]></title><description><![CDATA[<p>ich weiß, das der code chaotisch ist^^ ich kann leider keinen fehler posten, da es keinen gibt^^ das programm stürzt einfach ab. es passiert nixmehr^^ das mit new und delte hab ich jetzt auch erfahren, aber ich hab keine große lust, dass umzuschreiben^^ ich editir oben den beereich, in dem der fehler kommt^^</p>
<p>edit: edr fehler taucht bei beiden funktionen dort auf. hab aber keine ahnung, warum das ganze nichtmehr als code angezeigt wird, nun wo ich es markiert hab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435832</guid><dc:creator><![CDATA[Arathorns Sohn]]></dc:creator><pubDate>Sun, 13 Jan 2008 12:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 17:14:20 GMT]]></title><description><![CDATA[<p>Also was mir beim drüberfliegen noch aufgefallen ist, dass Du hier:</p>
<pre><code class="language-cpp">for(int i; i &lt;= sizeof(Program.buffer2); i++)
</code></pre>
<p>das 'i' nicht initialisierst. Aber so grausam, wie der Code aussiehst, sind da sicherlich noch viel mehr Fehler drin. Der Debugger (wie ja bereits schon erwähnt) wird Dir sehr weiterhelfen. Du musst natürlich auch auf Debug kompilieren, um auf die Symbolinformationen zugreifen zu können (d.h. der Debugger kann Dir dann den aktuellen Quellcode, der gerade ausgeführt wird anzeigen).</p>
<p>Glaube kaum, dass das so einer für Dich durcharbeiten wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436007</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 13 Jan 2008 17:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to unzählige unerklärliche abstürze on Sun, 13 Jan 2008 18:22:00 GMT]]></title><description><![CDATA[<p>mal sehen, ob ich was finde... komme mit dem borland turbo c++ debugger net so klar... nja, egal^^ hab jetzt auf jeden fall mal new und delete eingebaut, hat zumindest noch net geklappt^^ aja, was mir noch aufgefallen ist^^ beim aufruf von vokabel_eintragen stürzt er nicht immer abn, sondern nur manchmal^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436048</guid><dc:creator><![CDATA[Arathorns Sohn]]></dc:creator><pubDate>Sun, 13 Jan 2008 18:22:00 GMT</pubDate></item></channel></rss>