<?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[Problem mit realloc und LPARAM aus ListView]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Strucktur die ich als Array verwende. Da ich die größe der Array nicht kenne erweiter ich die Array mit realloc um ein Element.</p>
<p>es speichert auch alles wunderbar in der Struckturierten Array. nur läst sich die mit realloc erstellte Array nicht mehr als Adresse an das LPARAM eine ListView hängen.<br />
Bzw. hinhängen kann ich sie schon ohne das ein Fehler passiert, nur wenn ich die Adresse der Strucktur wieder aus LPARAM abrufen will stehn da alles andere drinn, nur nicht das was ich ihr zugewiesen hab.</p>
<p>weise ich der Struckturierten Array eine feste Größe zu, klapp alles ohne Probleme.</p>
<p>und bevor es zu missverständnissen kommt, m_SetupListCtrl ist eine von mir erstellte Classe unter verwendung der WINAPI.</p>
<p>hier meine Strucktur</p>
<pre><code>typedef struct tagITEMFILEPARAM
{
	char	lpszItemToolTip[1024];
	char	lpszFilePath[MAX_PATH];
	char	lpszFileName[512];
	char	lpszFileExt[4];

}ITEMFILEPARAM;

typedef UNALIGNED ITEMFILEPARAM * LPITEMFILEPARAM;

static LPITEMFILEPARAM	m_ipPL;
</code></pre>
<p>hier weise ich der Strucktur eine neue Größe &amp; einen Wert zu, und übergebe die Adresse an LParam.</p>
<pre><code>m_ipPL = (LPITEMFILEPARAM) realloc (m_ipPL,   (iIndex + 1) * sizeof(ITEMFILEPARAM));

	strcpy(m_ipPL[iIndex].lpszFilePath,lpFileName);

	LVITEM LvItem;
	memset(&amp;LvItem,0,sizeof(LvItem));
	LvItem.mask = LVIF_PARAM;
	LvItem.iItem = iIndex;
	LvItem.lParam = (LPARAM)&amp;m_ipPL[iIndex];

	iIndex = m_SetupListCtrl.InsertItem(&amp;LvItem);/**/
</code></pre>
<p>so versuche ich die Adresse aus dem LParam wieder zu bekommen, leider stimmt die Adresse nicht.</p>
<pre><code>LVITEM LvItem;
	memset(&amp;LvItem,0,sizeof(LvItem));				
	LvItem.mask	= LVIF_PARAM;			                
	LvItem.iItem	= iItem;			

	m_SetupListCtrl.GetItem(&amp;LvItem);

	LPITEMFILEPARAM ip		= (LPITEMFILEPARAM)LvItem.lParam;
	MsgBox(ip-&gt;lpszFilePath);
</code></pre>
<p>weise ich aber der m_ipPL eine Feste Größe zu Zb. m_ipPL[1024] klappt alles einwandfrei.<br />
weis jemand woran das liegt oder was ich falschmache?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226507/problem-mit-realloc-und-lparam-aus-listview</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 10:46:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226507.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Nov 2008 12:58:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 13:01:42 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Strucktur die ich als Array verwende. Da ich die größe der Array nicht kenne erweiter ich die Array mit realloc um ein Element.</p>
<p>es speichert auch alles wunderbar in der Struckturierten Array. nur läst sich die mit realloc erstellte Array nicht mehr als Adresse an das LPARAM eine ListView hängen.<br />
Bzw. hinhängen kann ich sie schon ohne das ein Fehler passiert, nur wenn ich die Adresse der Strucktur wieder aus LPARAM abrufen will stehn da alles andere drinn, nur nicht das was ich ihr zugewiesen hab.</p>
<p>weise ich der Struckturierten Array eine feste Größe zu, klapp alles ohne Probleme.</p>
<p>und bevor es zu missverständnissen kommt, m_SetupListCtrl ist eine von mir erstellte Classe unter verwendung der WINAPI.</p>
<p>hier meine Strucktur</p>
<pre><code>typedef struct tagITEMFILEPARAM
{
	char	lpszItemToolTip[1024];
	char	lpszFilePath[MAX_PATH];
	char	lpszFileName[512];
	char	lpszFileExt[4];

}ITEMFILEPARAM;

typedef UNALIGNED ITEMFILEPARAM * LPITEMFILEPARAM;

static LPITEMFILEPARAM	m_ipPL;
</code></pre>
<p>hier weise ich der Strucktur eine neue Größe &amp; einen Wert zu, und übergebe die Adresse an LParam.</p>
<pre><code>m_ipPL = (LPITEMFILEPARAM) realloc (m_ipPL,   (iIndex + 1) * sizeof(ITEMFILEPARAM));

	strcpy(m_ipPL[iIndex].lpszFilePath,lpFileName);

	LVITEM LvItem;
	memset(&amp;LvItem,0,sizeof(LvItem));
	LvItem.mask = LVIF_PARAM;
	LvItem.iItem = iIndex;
	LvItem.lParam = (LPARAM)&amp;m_ipPL[iIndex];

	iIndex = m_SetupListCtrl.InsertItem(&amp;LvItem);/**/
</code></pre>
<p>so versuche ich die Adresse aus dem LParam wieder zu bekommen, leider stimmt die Adresse nicht.</p>
<pre><code>LVITEM LvItem;
	memset(&amp;LvItem,0,sizeof(LvItem));				
	LvItem.mask	= LVIF_PARAM;			                
	LvItem.iItem	= iItem;			

	m_SetupListCtrl.GetItem(&amp;LvItem);

	LPITEMFILEPARAM ip		= (LPITEMFILEPARAM)LvItem.lParam;
	MsgBox(ip-&gt;lpszFilePath);
</code></pre>
<p>weise ich aber der m_ipPL eine Feste Größe zu Zb. m_ipPL[1024] klappt alles einwandfrei.<br />
weis jemand woran das liegt oder was ich falschmache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608928</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Sun, 02 Nov 2008 13:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 13:14:03 GMT]]></title><description><![CDATA[<p>Ist iIndex und iItem gleich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608930</guid><dc:creator><![CDATA[assd]]></dc:creator><pubDate>Sun, 02 Nov 2008 13:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 13:36:47 GMT]]></title><description><![CDATA[<p>ja die sind gleich,<br />
ich klicke mit der rechten maustaste auf das element in der Listview und hole mir die Nr des Items.</p>
<p>ich hab auch schon versucht in der Funktion in der ich mir das LPARAM aus der Liste holen will, mit</p>
<pre><code>m_ipPL[iItem].lpszFilePath
</code></pre>
<p>den wert anzeigen zu lassen und das klappt.<br />
die werte werden also gespeichert.</p>
<p>es speichert mir nur nicht die Adresse, bzw. wenn es eine Adresse speichert, ist diese Falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608936</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Sun, 02 Nov 2008 13:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 15:27:27 GMT]]></title><description><![CDATA[<p>Warum machst Du das überhaupt so kompliziert. Allokiere doch direkt einen Eintrag und setze das in den lParam Eintrag. Dann trägt jedes ListBox-Item den Zeiger selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608986</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 02 Nov 2008 15:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 15:31:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Allokiere doch direkt einen Eintrag und setze das in den lParam Eintrag</p>
</blockquote>
<p>kann dir da gerade nicht folgen!<br />
wie meinst du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608989</guid><dc:creator><![CDATA[*rT*f*Ct]]></dc:creator><pubDate>Sun, 02 Nov 2008 15:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 16:26:46 GMT]]></title><description><![CDATA[<p>Du trägst eine Index Position aus einem Array in dem Item ein.<br />
Du könntest direkt einen Eintrag einzeln allokieren und diesen Zeiger in dem List View Item eintragen.</p>
<p>BTW: Deine Strktur ist extrem speicherverwendend. Die Verwednung von CString oder std::string wäre effektiver.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609008</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 02 Nov 2008 16:26:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit realloc und LPARAM aus ListView on Sun, 02 Nov 2008 16:27:10 GMT]]></title><description><![CDATA[<p>MSDN (realloc) schrieb:</p>
<blockquote>
<p>The contents of the block are unchanged up to the shorter of the new and old sizes, although the new block can be in a different location. Because the new block can be in a new memory location, the pointer returned by realloc is not guaranteed to be the pointer passed through the memblock argument.</p>
</blockquote>
<p>Mit jedem realloc kann sich der Zeiger m_ipPL ändern, damit zeigen die im ListView-Item gespeicherten LPARAMs auf ungültige Bereiche.</p>
<p>Martin meint, dass Du beim Anlegen eines neuen Eintrags ein</p>
<pre><code class="language-cpp">ITEMFILEPARAM* pParam = (ITEMFILEPARAM*) malloc(sizeof(ITEMFILEPARAM));
</code></pre>
<p>machen sollst und diesen dann lvItem.lParam zuweisen sollst. Damit es keine Speicherlecks gibt, solltest Du aber auch LVN_DELETEITEM abfangen und dort den Speicher wieder freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609009</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Sun, 02 Nov 2008 16:27:10 GMT</pubDate></item></channel></rss>