Порядок объявления переменных
int z;
int n=10;
for (z=0;z<n;z++)
{
b[z] = new TButton(Application);
b[z]->Parent = Form1;
b[z]->Visible=true;
}
объявить **b после z и n, т.е. вот так
int n=10;
TButton **b;
for (z=0;z<n;z++)
{
b[z] = new TButton(Application);
b[z]->Parent = Form1;
b[z]->Visible=true;
}
то в строке
вылетает access violation ???!
Где ты выделяешь область памяти под массив, по которому далее итерируешься - b[z] ?
Для начала его надо создать.
Ты с переменной на которую выделено место на один указатель работаешь как с массивом указателей.
В этом случае записываемые тобой значения сохраняются в то место которое располагается сразу за этой переменной.
Что будет находится в участке памяти который ты портишь заранее точно сказать нельзя, зависит от компилятора, но что можно сказать точно это то что неправильный и первый код и второй, вопрос в том что в одном случае ты замечаешь это сразу а в другом возможно увидишь это позже...
В коде откомпилированной и запущенной программы есть места которые занимают память и не используются, что то в заголовке файла, если какой-то кусок кода используется в начале исполнения программы и в дальнейшем не нужен то занятое им место можно безвредно портить, какой-то кусок кода нужен при обращении к библиотекам Windows которые твоей программе и не нужны (пока не нужны)...
В твоем случае во втором варианте кода опасная область необъявленного массива находится ближе к коду цикла и вероятность проявления ошибки становится больше
PS Вопрос типа: Почему если я удаляю из папки Windows один из файлов она виснет а если другой то нет, в какой очередности их нужно удалять правильно? :)