char **test()
{
char *a[3];
a[0] = (char *) malloc(sizeof(char) *3);
a[1] = (char *) malloc(sizeof(char) *3);
a[0] = "aa";
a[1] = "bb";
return a;
}
//main
try{
char ** a;
a = test();
cout << a[0] << " " << a[1];
}
catch(std::exception){}
компилируется в VS2008, эта программа не в состоянии выхода «бб», но после того, как я удалить блок попытаться поймать, он оказался «аа бб», который правда. Причина и решение?попытка поймать оказывает влияние на гольца ** Возвращаемые значения
Помимо утечек памяти, была ли конкретная точка на это (или, может быть, я просто пропустил его, как только я увидел те).? Вы возвращаете адрес локальной переменной, которая выходит за пределы области действия, когда вы eval 'a []' в своей основной. Не уверен, что это ваше намерение, но это ** неопределенное поведение **. – WhozCraig
Почему мы используем malloc в C++? – andre
@andre, потому что он может, и '' не бросает '# error' в качестве замены макросов, когда вы это делаете (пока). –
WhozCraig