Ну, простой ответ заключается в том, что вы должны освободить pData->URL
перед тем, как заменить его результатом StrDupA
.Например:
pData->URL = NULL ;
do
{
pURL = //Some Function Here
LocalFree(pData->URL) ;
pData->URL = StrDupA(pURL) ;
}while(pURL != NULL) ;
Что касается возбуждаемого исключения, в комментарии вы указываете, что в какой-то момент pURL
равно NULL
.Когда это произойдет, StrDupA
потерпит неудачу.Я не могу по-настоящему посоветовать вам, как это исправить, потому что просто не могу понять, что пытается сделать этот код.
Возможно, вы также теряете память, созданную функцией, которая назначаетpURL
.
Я не могу понять, почему хотел бы использовать StrDupA
вместо strdup
, который обеспечивает среда выполнения C.Вы звоните StrDupA
из Shlwapi.dll.Это не имеет смысла для меня.Вызовите его из среды выполнения C и освободите память старым добрым free()
.
Я также не понимаю, почему завершение цикла разработано так, что оно никогда не завершается.И я не смотрел ни на один ваш код, кроме этого сингла do while.