Вопрос № 118156: Здраствуйте, не могли бы вы помочь в решении этой задачи:
Даны целые массивы А[10],B[10],C[10]. Каждый массив преобразован по правилу: если компоненты массива образуют убывающую последовательность, то все отрицательные компоненты следует заменить...Вопрос № 118157: Здравтсвуйте, уважаемые эксперты! Прошу найти ошибку в моём коде
Возникает ошибка при выделении памяти для массива PathList
//----------
while(ofn.lpstrFile[nOffset]!='{
PathList[i] = new char [strlen(ofn.lpstrFile)+s...
Вопрос № 118.156
Здраствуйте, не могли бы вы помочь в решении этой задачи:
Даны целые массивы А[10],B[10],C[10]. Каждый массив преобразован по правилу: если компоненты массива образуют убывающую последовательность, то все отрицательные компоненты следует заменить на значение 0. В противном случае массив остается без изменений.
Отвечает: X-men
Здравствуйте, Володька Зырянов! В приложении - текст вашей программы. Программа написана на VC++. В будущем, пожалуйста, указывайте в своём вопросе на чём нужно писать вашу программу (Borland, Microsoft, или ещё что-то...).
Приложение:
Ответ отправил: X-men (статус: 6-ой класс)
Ответ отправлен: 12.01.2008, 22:51
Вопрос № 118.157
Здравтсвуйте, уважаемые эксперты! Прошу найти ошибку в моём коде
Возникает ошибка при выделении памяти для массива PathList
//----------
while(ofn.lpstrFile[nOffset]!='{
PathList[i] = new char [strlen(ofn.lpstrFile)+strlen(ofn.lpstrFile+nOffset)+1]; wsprintf(PathList[i],"%s\%s",ofn.lpstrFile,ofn.lpstrFile+nOffset);
SendMessage(list,LB_ADDSTRING,0,(LPARAM)ofn.lpstrFile+nOffset);
nOffset+=strlen(ofn.lpstrFile+nOffset) + 1;
MessageBox(0,PathList[i],"PATH",MB_OK);
i++;
}
//---
Весь код в приложении
P.S. MSVC 2005
Приложение:
Отправлен: 12.01.2008, 19:26
Вопрос задал: Xeladen (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: heap11
Здравствуйте, Xeladen!
PathList в программе описан так
char **PathList;
Трактовать это можно, как массив указателей на массивы символов.
Т.е. PathList[0] , PathList[1], PathList[2], ... - указатели на массивы символов
и под эти массивы в программе память выделяется:
PathList[i] = new char [...
под сам же массив указателей PathList память не выделена.
Далее, попытка освободить память, которую не выделяли:
delete [] PathList;
также может приводить к непредсказуемым последствиям.
Замечу, кстати, что последний оператор вовсе не освобождает память выделенную под массвы символов PathList[i].
Законный порядок может быть следующим
1) Выделение памяти под PathList
PathList = new char*[nn];
2) Теперь можно использоваь PathList [i] для 0 <= i < nn;
PathList[i] = new char[...];
Освобождение памяти должно быть выполнено в обратном порядке,
а именно, сначала для тех i, для которых была выделена память под PathList[i]
и только для них освобождается память
3) delete PathList[i];
и лишь после этого можно выполнить
4) delete PathList;
Ответ отправил: heap11 (статус: 5-ый класс)
Ответ отправлен: 13.01.2008, 00:26