<?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[Speicherzugriffsfehler - Warum?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programmm geschrieben, das alle Dateien und Ordner in eine sqlite3 Datenbank speichern soll.</p>
<p>Hier ist das Programm:</p>
<pre><code>// main.cpp -- Suche für Elements

#include&lt;iostream&gt;
#include&lt;sqlite3.h&gt;
#include&lt;cstring&gt;
#include&lt;dirent.h&gt;

using namespace std;

void saveFilename(char folder[], char filename[])
{
	cout &lt;&lt; &quot;Speichere Datei &quot; &lt;&lt; filename &lt;&lt; &quot; in Ordner &quot;
	     &lt;&lt; folder &lt;&lt; &quot; in Datenbank...&quot; &lt;&lt; endl;
	sqlite3 *db;
	int rc;
	const int charsize = strlen(&quot;INSERT INTO filenames (foldername, filename) VALUES ('&quot;) + strlen(folder) + strlen(&quot;', '&quot;) + strlen(filename) + strlen(&quot;');&quot;) + 1;
	char sql[charsize];
	strcat(sql, &quot;INSERT INTO filenames (foldername, filename) &quot; \
	      &quot;VALUES ('&quot;);
	strcat(sql, folder);
	strcat(sql, &quot;', '&quot;);
	strcat(sql, filename);
	strcat(sql, &quot;');&quot;);
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_exec(db, sql, 0, 0, 0);
	sqlite3_close(db);
}

void saveFolder(char folder[], char foldername[])
{
	cout &lt;&lt; &quot;Speichere Ordner &quot; &lt;&lt; foldername &lt;&lt; &quot; in Ordner &quot;
	     &lt;&lt; foldername &lt;&lt; &quot; in Datenbank...&quot; &lt;&lt; endl;
	sqlite3 *db;
	int rc;
	const int charsize = strlen(&quot;INSERT OR IGNORE INTO folders (foldername, foldername2) VALUES ('&quot;) + strlen(folder) + strlen(&quot;', '&quot;) + strlen(folder) + strlen(&quot;');&quot;) + 1;
	char sql[charsize];
	strcat(sql, &quot;INSERT INTO folders (foldername, foldername2) &quot; \
	      &quot;VALUES ('&quot;);
	strcat(sql, folder);
	strcat(sql, &quot;', '&quot;);
	strcat(sql, foldername);
	strcat(sql, &quot;');&quot;);
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_exec(db, sql, 0, 0, 0);
	sqlite3_close(db);
}

void indexing(char folder[])
{
	cout &lt;&lt; &quot;Öffne Ordner &quot; &lt;&lt; folder &lt;&lt; &quot;...&quot; &lt;&lt; endl;
	DIR *dir;
	struct dirent *ent;
	unsigned char isFile = 0x8;
	unsigned char isFolder = 0x4;

	if((dir = opendir(folder)) != NULL)
	{
		while((ent = readdir(dir)) != NULL)
		{
			if(!(strcmp(&quot;.&quot;, ent-&gt;d_name) == 0) &amp;&amp; !(strcmp(&quot;..&quot;, ent-&gt;d_name) == 0))
			{
				if(ent-&gt;d_type == isFile)
				{
					saveFilename(folder, ent-&gt;d_name);
				}
				else if(ent-&gt;d_type == isFolder)
				{
					cout &lt;&lt; strlen(folder) &lt;&lt; &quot; &quot; &lt;&lt; strlen(ent-&gt;d_name) &lt;&lt; &quot; &quot; &lt;&lt; endl;
					const int len = strlen(folder) + strlen(ent-&gt;d_name) + 2;
					char newfolder[len];
					strcpy(newfolder, folder);
					strcat(newfolder, ent-&gt;d_name);
					strcat(newfolder, &quot;/&quot;);
					cout &lt;&lt; newfolder &lt;&lt; endl;
					saveFolder(folder, ent-&gt;d_name);
					indexing(newfolder);
				}
			}
		}
		cout &lt;&lt; &quot;Schliesse Ordner &quot; &lt;&lt; folder &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		closedir(dir);
	}
	else
	{
		cout &lt;&lt; &quot;Fehler beim öffnen von &quot; &lt;&lt; folder &lt;&lt; endl;
	}

}

int main()
{
	int rc, rc2;

	cout &lt;&lt; &quot;Datenbanktabellen erstellen...&quot; &lt;&lt; endl;
	sqlite3 *db;
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_stmt *statement;
	rc = sqlite3_exec(db, &quot;CREATE TABLE folders (foldername TEXT, foldername2 TEXT);&quot;, 0, 0, 0);
	rc2 = sqlite3_exec(db, &quot;CREATE TABLE filenames (foldername TEXT, filename TEXT)&quot;, 0, 0, 0);
	if(rc == SQLITE_OK &amp;&amp; rc2 == SQLITE_OK) cout &lt;&lt; &quot; Tabellen erstellt.&quot; &lt;&lt; endl;
	sqlite3_close(db);

	indexing(&quot;/media/Elements/&quot;);

	return 0;
}
</code></pre>
<p>Bei einer Datei kommt aber ein Speicherzugriffsfehler. Liegt es daran, dass der Dateiname so lang ist?</p>
<pre><code>Speichere Datei In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol - Deutsche Verlags-Anstalt _Munchen_.mobi in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/ in Datenbank...
Speicherzugriffsfehler (Speicherabzug geschrieben)
ubik@Lenovo-G770:~/Dokumente/Programmierung/Eigene Projekte/Suche für Elements$
</code></pre>
<p>Wie könnte ich das Problem lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322619/speicherzugriffsfehler-warum</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 01:50:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322619.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Dec 2013 16:03:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 16:03:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programmm geschrieben, das alle Dateien und Ordner in eine sqlite3 Datenbank speichern soll.</p>
<p>Hier ist das Programm:</p>
<pre><code>// main.cpp -- Suche für Elements

#include&lt;iostream&gt;
#include&lt;sqlite3.h&gt;
#include&lt;cstring&gt;
#include&lt;dirent.h&gt;

using namespace std;

void saveFilename(char folder[], char filename[])
{
	cout &lt;&lt; &quot;Speichere Datei &quot; &lt;&lt; filename &lt;&lt; &quot; in Ordner &quot;
	     &lt;&lt; folder &lt;&lt; &quot; in Datenbank...&quot; &lt;&lt; endl;
	sqlite3 *db;
	int rc;
	const int charsize = strlen(&quot;INSERT INTO filenames (foldername, filename) VALUES ('&quot;) + strlen(folder) + strlen(&quot;', '&quot;) + strlen(filename) + strlen(&quot;');&quot;) + 1;
	char sql[charsize];
	strcat(sql, &quot;INSERT INTO filenames (foldername, filename) &quot; \
	      &quot;VALUES ('&quot;);
	strcat(sql, folder);
	strcat(sql, &quot;', '&quot;);
	strcat(sql, filename);
	strcat(sql, &quot;');&quot;);
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_exec(db, sql, 0, 0, 0);
	sqlite3_close(db);
}

void saveFolder(char folder[], char foldername[])
{
	cout &lt;&lt; &quot;Speichere Ordner &quot; &lt;&lt; foldername &lt;&lt; &quot; in Ordner &quot;
	     &lt;&lt; foldername &lt;&lt; &quot; in Datenbank...&quot; &lt;&lt; endl;
	sqlite3 *db;
	int rc;
	const int charsize = strlen(&quot;INSERT OR IGNORE INTO folders (foldername, foldername2) VALUES ('&quot;) + strlen(folder) + strlen(&quot;', '&quot;) + strlen(folder) + strlen(&quot;');&quot;) + 1;
	char sql[charsize];
	strcat(sql, &quot;INSERT INTO folders (foldername, foldername2) &quot; \
	      &quot;VALUES ('&quot;);
	strcat(sql, folder);
	strcat(sql, &quot;', '&quot;);
	strcat(sql, foldername);
	strcat(sql, &quot;');&quot;);
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_exec(db, sql, 0, 0, 0);
	sqlite3_close(db);
}

void indexing(char folder[])
{
	cout &lt;&lt; &quot;Öffne Ordner &quot; &lt;&lt; folder &lt;&lt; &quot;...&quot; &lt;&lt; endl;
	DIR *dir;
	struct dirent *ent;
	unsigned char isFile = 0x8;
	unsigned char isFolder = 0x4;

	if((dir = opendir(folder)) != NULL)
	{
		while((ent = readdir(dir)) != NULL)
		{
			if(!(strcmp(&quot;.&quot;, ent-&gt;d_name) == 0) &amp;&amp; !(strcmp(&quot;..&quot;, ent-&gt;d_name) == 0))
			{
				if(ent-&gt;d_type == isFile)
				{
					saveFilename(folder, ent-&gt;d_name);
				}
				else if(ent-&gt;d_type == isFolder)
				{
					cout &lt;&lt; strlen(folder) &lt;&lt; &quot; &quot; &lt;&lt; strlen(ent-&gt;d_name) &lt;&lt; &quot; &quot; &lt;&lt; endl;
					const int len = strlen(folder) + strlen(ent-&gt;d_name) + 2;
					char newfolder[len];
					strcpy(newfolder, folder);
					strcat(newfolder, ent-&gt;d_name);
					strcat(newfolder, &quot;/&quot;);
					cout &lt;&lt; newfolder &lt;&lt; endl;
					saveFolder(folder, ent-&gt;d_name);
					indexing(newfolder);
				}
			}
		}
		cout &lt;&lt; &quot;Schliesse Ordner &quot; &lt;&lt; folder &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		closedir(dir);
	}
	else
	{
		cout &lt;&lt; &quot;Fehler beim öffnen von &quot; &lt;&lt; folder &lt;&lt; endl;
	}

}

int main()
{
	int rc, rc2;

	cout &lt;&lt; &quot;Datenbanktabellen erstellen...&quot; &lt;&lt; endl;
	sqlite3 *db;
	sqlite3_open(&quot;Elements.db&quot;, &amp;db);
	sqlite3_stmt *statement;
	rc = sqlite3_exec(db, &quot;CREATE TABLE folders (foldername TEXT, foldername2 TEXT);&quot;, 0, 0, 0);
	rc2 = sqlite3_exec(db, &quot;CREATE TABLE filenames (foldername TEXT, filename TEXT)&quot;, 0, 0, 0);
	if(rc == SQLITE_OK &amp;&amp; rc2 == SQLITE_OK) cout &lt;&lt; &quot; Tabellen erstellt.&quot; &lt;&lt; endl;
	sqlite3_close(db);

	indexing(&quot;/media/Elements/&quot;);

	return 0;
}
</code></pre>
<p>Bei einer Datei kommt aber ein Speicherzugriffsfehler. Liegt es daran, dass der Dateiname so lang ist?</p>
<pre><code>Speichere Datei In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol - Deutsche Verlags-Anstalt _Munchen_.mobi in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/ in Datenbank...
Speicherzugriffsfehler (Speicherabzug geschrieben)
ubik@Lenovo-G770:~/Dokumente/Programmierung/Eigene Projekte/Suche für Elements$
</code></pre>
<p>Wie könnte ich das Problem lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374306</guid><dc:creator><![CDATA[ubik]]></dc:creator><pubDate>Tue, 31 Dec 2013 16:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 16:42:28 GMT]]></title><description><![CDATA[<p>Wahrscheinlich. Schau dir den Callstack beim Crash mit einem Debugger an. Steht dran, &quot;Speicherabzug geschrieben&quot;. Muss nicht unbedingt stimmen, aber wenn tatsächlich ein dump geschrieben wurde, kannst du den mit einem Debugger anschauen. Sonst einfach dein Programm in einem Debugger starten.</p>
<p>Ich würd mir die Mühe aber ehrlich gesagt nicht machen. Was du machst ist kein C++, das ist C mit cout. Ich will das erst gar nicht durchschauen. Diese ganze manuelle Stringverwaltung ist sehr fehleranfällig und in C++ überhaupt nicht nötig. Wenn du richtiges C++ schreibst, wirst du solche Probleme überhaupt nicht mehr haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374313</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Tue, 31 Dec 2013 16:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 16:51:01 GMT]]></title><description><![CDATA[<p>In Zeilen 18 und 37 ist sql wohl nicht nullterminiert.<br />
Wie sehen die geschriebenen Daten aus? Oder ist &quot;In den eisigen Tod&quot; gleich das erste Buch?<br />
Ansonsten gilt, was Mechanics sagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374319</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 31 Dec 2013 16:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 16:56:39 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Ich würd mir die Mühe aber ehrlich gesagt nicht machen. Was du machst ist kein C++, das ist C mit cout. Ich will das erst gar nicht durchschauen. Diese ganze manuelle Stringverwaltung ist sehr fehleranfällig und in C++ überhaupt nicht nötig. Wenn du richtiges C++ schreibst, wirst du solche Probleme überhaupt nicht mehr haben.</p>
</blockquote>
<p>Leider kann ich für die Funktionen sqlite3_exec(...) keinen C++ String verwenden, ich brauche ein const char, um die Variable <em>sql</em> zu übergeben.</p>
<p>Die Daten sehen so aus:</p>
<pre><code>filename = &quot;In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol - Deutsche Verlags-Anstalt _Munchen_.mobi&quot;
folder = &quot;/media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374322</guid><dc:creator><![CDATA[ubik]]></dc:creator><pubDate>Tue, 31 Dec 2013 16:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 17:02:00 GMT]]></title><description><![CDATA[<p>ubik schrieb:</p>
<blockquote>
<p>Leider kann ich für die Funktionen sqlite3_exec(...) keinen C++ String verwenden, ich brauche ein const char, um die Variable <em>sql</em> zu übergeben.</p>
</blockquote>
<p>Geht alles. string::c_str()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374324</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 31 Dec 2013 17:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 17:02:14 GMT]]></title><description><![CDATA[<p>ubik schrieb:</p>
<blockquote>
<p>Leider kann ich für die Funktionen sqlite3_exec(...) keinen C++ String verwenden, ich brauche ein const char, um die Variable <em>sql</em> zu übergeben.</p>
</blockquote>
<p><a href="http://en.cppreference.com/w/cpp/string/basic_string/c_str" rel="nofollow">http://en.cppreference.com/w/cpp/string/basic_string/c_str</a></p>
<p>ubik schrieb:</p>
<blockquote>
<p>Die Daten sehen so aus:[..]</p>
</blockquote>
<p>Ich meinte die Daten, die bereits in der DB gelandet sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374325</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 31 Dec 2013 17:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 17:13:29 GMT]]></title><description><![CDATA[<p>Die letzte Datei in der Datenbank ist:</p>
<pre><code>/media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/DER SPIEGEL 24_12 (42)/|cover.jpg
</code></pre>
<pre><code>Speichere Datei cover.jpg in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/DER SPIEGEL 24_12 (42)/ in Datenbank...
Speichere Datei DER SPIEGEL 24_12 - DER SPIEGEL.pdf in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/DER SPIEGEL 24_12 (42)/ in Datenbank...
Speichere Datei metadata.opf in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/DER SPIEGEL 24_12 (42)/ in Datenbank...
Schliesse Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/DER SPIEGEL 24_12 (42)/...
Schliesse Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/DER SPIEGEL/...
54 34
/media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/
Speichere Ordner Deutsche Verlags-Anstalt _Munchen_ in Ordner Deutsche Verlags-Anstalt _Munchen_ in Datenbank...
Öffne Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/...
89 64
/media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/
Speichere Ordner In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60) in Ordner In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60) in Datenbank...
Öffne Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/...
Speichere Datei cover.jpg in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/ in Datenbank...
Speichere Datei In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol - Deutsche Verlags-Anstalt _Munchen_.epub in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/ in Datenbank...
Speichere Datei In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol - Deutsche Verlags-Anstalt _Munchen_.mobi in Ordner /media/Elements/Backup/2. Juli 2013/Dokumente/Calibre/Deutsche Verlags-Anstalt _Munchen_/In den eisigen Tod - Robert F. Scotts Expedition zum Sudpol (60)/ in Datenbank...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374329</guid><dc:creator><![CDATA[ubik]]></dc:creator><pubDate>Tue, 31 Dec 2013 17:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 17:26:32 GMT]]></title><description><![CDATA[<p>Ich wollte wissen, ob die Daten, die vor dem Absturz geschrieben wurden alle korrekt in der DB gelandet sind, nicht, was dein Programm ausgibt.</p>
<p>Aber ehrlich, schreib's mit <code>std::string</code> und jut is.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374332</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 31 Dec 2013 17:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler - Warum? on Tue, 31 Dec 2013 17:47:06 GMT]]></title><description><![CDATA[<p>Ok, hab es in String umgeändert. Das Programm läuft jetzt durch. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374335</guid><dc:creator><![CDATA[ubik]]></dc:creator><pubDate>Tue, 31 Dec 2013 17:47:06 GMT</pubDate></item></channel></rss>