Так что я пытаюсь добавить Динамически выделяется char*
, который возвращается из процедуры под названиемРаспределение динамической памяти C++. Назначение динамически выделенного массива переменной char * return переменной char?
GetFileInputFromUser();
Я динамически выделить память для переменной возврата внутри процедуры.
char* pstrReturnValue;
// Prime the loop
cout << "please enter a file location on your local machine (type 1 for default location) ";
cin >> strFileInputFromUser;
// Default location?
if (*(strFileInputFromUser + intIndex) == '1')
{
// yes, Get the length
intLength = strlen(strDefaultFileLocation);
// Allocate memory
pstrReturnValue = new char[intLength];
// copy default location in
for (intIndex = 0; intIndex <= intLength; intIndex += 1)
{
*(pstrReturnValue + intIndex) = *(strDefaultFileLocation + intIndex);
}
return pstrReturnValue;
Что мне нужно - это добавить возвращаемую переменную в другой массив символов (динамически выделяется).
void main()
{
bool blnResult = false;
ifstream ifsDataFile;
udtNodeType* pudtHeadNode = 0;
udtNodeType* pudtCurrentNode = 0;
udtNodeType* pudtNextNode = 0;
char* strFile;
udtNodeType udtReturnNode;
// Get the file path
strFile = GetFileInputFromUser();
blnResult = OpenFile(strFile, ifsDataFile);
// was it successful?
if (blnResult == true)
{
// Yes
// populate the list and, return the top node
udtReturnNode = *PopulateList(pudtNextNode, pudtCurrentNode, pudtHeadNode, &ifsDataFile);
// All done, close the file
ifsDataFile.close();
delete[] strFile;
// Delete the list
DeleteList(pudtNextNode, pudtCurrentNode, pudtHeadNode);
// Delete proof
PrintList(pudtNextNode, pudtCurrentNode, pudtHeadNode);
}
system("pause");
}
Это упражнение и в соответствии с требованиями, GetFileInputFromUser()
должен быть char*
он должен вернуть этот указатель, и я должен удалить этот указатель, прежде чем я Утилизируйте LinkedList. Мое дело в этом, я знаю, как динамически распределять память, и я знаю, как удалить указанную память, моя проблема заключается в том, что я не могу просто присвоить значение статически выделенному char[]
, я не могу зациклиться на возвращаемом значении, чтобы назначить его причиной Я должен быть в состоянии получить квоту возвращения во что-то.
Я попытался сменить char* GetFileInputFromUser()
на char& GetFileInputFromUser()
в надежде, что я смогу получить адрес в месте нахождения в памяти и посмотреть, могу ли я надеяться, что с ним так будет де-ссылкой на возвращаемое значение.
Если вы закомментируете delete[] strFile
и запустите его, все будет хорошо, но я пропущу память, и это нехорошо в моих глазах. Я знаю, что есть способ сделать это, но Google не помогает, и я застрял на этом с 1 утра прошлой ночью.
Благодарим всех вас за помощь.
Если вы хотите использовать строки, а затем использовать 'станд :: string', то вы не будете иметь проблемы с выделения памяти, и у вас не будет проблем писать вне границ, которых вы делаешь сейчас. Вы * do * однако завершаете строку, но (это то, что вызовет заглавную запись), но это больше удача, я думаю. –
И что касается утечки, если 'OpenFile' терпит неудачу, тогда вы все равно пропустите память. –
Я не забываю закончить строку, потому что, когда я добавил UserInput к новому динамически выделенному символу char [], я копирую и через терминатор, я просто прошел через отладчик, чтобы проверить, прежде чем я разместил этот ответ. Я не могу использовать std :: String, с которым мне очень хотелось бы, но это не соответствует требованиям. – user3119737