подскажите, как пошагово скомпилировать исходник на c++ под архитектуру MIPS в Linux? Используя GCC, какие команды компиляции?
» Вопросы по программированию на C/С++
Добрый день!
Подскажите, корректен ли следующий код.
class A{
char* m_data;
public:
A() {
m_data = new char[100];
memset(m_data,0x31,100);
m_data[99] = 0;
printf("+A");
}
~A() {
delete[] m_data;
printf("-A");
}
char* data() {
return m_data;
}
};
void ParseData(char* data) {
printf("data = %s",data);
}
int _tmain(int argc, _TCHAR* argv[])
{
ParseData(A().data()); //У меня здесь сомнения имею ли я право использовать параметр-указатель в теле функции
return 0;
}
При проверке на VS2005 все работает на ура, так как объект создаваемый при вычислении параметров функции удаляется после выполнения функции. Но все же у меня здесь сомнения. Я поискал описания в инете, но нигде не нашел точной информации о времени жизни объектов используемых при расчете параметров функции.
Подскажите, корректен ли следующий код.
class A{
char* m_data;
public:
A() {
m_data = new char[100];
memset(m_data,0x31,100);
m_data[99] = 0;
printf("+A");
}
~A() {
delete[] m_data;
printf("-A");
}
char* data() {
return m_data;
}
};
void ParseData(char* data) {
printf("data = %s",data);
}
int _tmain(int argc, _TCHAR* argv[])
{
ParseData(A().data()); //У меня здесь сомнения имею ли я право использовать параметр-указатель в теле функции
return 0;
}
При проверке на VS2005 все работает на ура, так как объект создаваемый при вычислении параметров функции удаляется после выполнения функции. Но все же у меня здесь сомнения. Я поискал описания в инете, но нигде не нашел точной информации о времени жизни объектов используемых при расчете параметров функции.
Всем спасибо. Разобрался сам
Правильно. Время жизни временных объектов - обычно до конца выражения, в пределах которого он создан. Тут это ; после вызова функции. Есть случаи, когда время жизни продлевается. Например, при использовании временного объекта для инициализации ссылки.
Стандарт C++ описывает времена жизни объектов в разделе 3.8. Очень подробно.
Стандарт C++ описывает времена жизни объектов в разделе 3.8. Очень подробно.
Ребят, подскажите пожалуйста, как парсить такие выражения и решать их?
Код: 15*(48+29*(-55))-(23+67)/(88-58)
Код: 15*(48+29*(-55))-(23+67)/(88-58)
Romeo_sh
Цитата:
Ну так значит надо свести задачу к задаче без скобок.
Проще всего это наверное сделать рекурсией (правда вопрос, как лучше передавать строку - возможно проще её сделать глобальной, а передавать текущую позицию курсора разборщика).
То есть ваш алгоритм работает как обычно, за исключением того, что когда:
1. натыкаемся на открывающуюся скобку - вызываем рекурсивно разборщик с позиции в строке сразу за скобкой;
2. натыкаемся на закрывающуюся скобку - производим возврат из функции разборщика с посчитанным на тот момент результатом разбора;
3. когда закончилась строка, а мы не в самой первой функции разбора, или очередная закрывающая скобка, а мы в самой первой - значит нет баланса по скобкам.
А вообще задача классическая и готовых решений куча.
Цитата:
Без скобок - без проблем решаю задачу
Ну так значит надо свести задачу к задаче без скобок.
Проще всего это наверное сделать рекурсией (правда вопрос, как лучше передавать строку - возможно проще её сделать глобальной, а передавать текущую позицию курсора разборщика).
То есть ваш алгоритм работает как обычно, за исключением того, что когда:
1. натыкаемся на открывающуюся скобку - вызываем рекурсивно разборщик с позиции в строке сразу за скобкой;
2. натыкаемся на закрывающуюся скобку - производим возврат из функции разборщика с посчитанным на тот момент результатом разбора;
3. когда закончилась строка, а мы не в самой первой функции разбора, или очередная закрывающая скобка, а мы в самой первой - значит нет баланса по скобкам.
А вообще задача классическая и готовых решений куча.
Никто не сталкивался с проблемами шаблонов в Buildere?
простейшая запись
template <class T>
class _list : public list<T,allocator<T>>
{
};
которая нормально компилируется в VS2005, в билдере дает ошибку компиляции
[BCC32 Error] stdlib.h(17): E2299 Cannot generate template specialization from 'allocator<_Ty>'
Что я не так написал, или это косяки билдера? (Builder XE)
Добавлено:
Всем спасибо. Нашел сам.
Это выглядит забавно, но билдер распознавал последние два символа в
class _list : public list<T,allocator<T>>
как оператор >>
Если поставить пробел, все компилируется нормально -
template <class T>
class _list : public list<T,allocator<T> >
{
};
простейшая запись
template <class T>
class _list : public list<T,allocator<T>>
{
};
которая нормально компилируется в VS2005, в билдере дает ошибку компиляции
[BCC32 Error] stdlib.h(17): E2299 Cannot generate template specialization from 'allocator<_Ty>'
Что я не так написал, или это косяки билдера? (Builder XE)
Добавлено:
Всем спасибо. Нашел сам.
Это выглядит забавно, но билдер распознавал последние два символа в
class _list : public list<T,allocator<T>>
как оператор >>
Если поставить пробел, все компилируется нормально -
template <class T>
class _list : public list<T,allocator<T> >
{
};
asi81, всё верно. По Стандарту компилятор должен разбивать текст программы на отдельные токены, захватывая как можно длинную последовательность лексем, пока это возможно. Именно это позволяет не получать синтаксических ошибок в операциях сдвига (не путая их с парой операций сравнения), составного присваивания (не путая их с суперпозицией арифметической операции и обычного присваивания), при разборе идентификаторов типа itIs_new_value (не обращая внимание на ключевое слово new внутри него) или record123 (не пытаясь распознавать 123 как число отдельно от слова record) итп.
В новом Стандарте C++1x есть послабление этого принципа, и >> сможет использоваться без пробелов, когда контекст однозначно указывает на список аргументов шаблона. Но в C++03 такого послабления нет. Хотя многие компиляторы тем не менее это позволяют, они всё равно пишут warning при компиляции, потому что это не по текущему Стандарту.
В новом Стандарте C++1x есть послабление этого принципа, и >> сможет использоваться без пробелов, когда контекст однозначно указывает на список аргументов шаблона. Но в C++03 такого послабления нет. Хотя многие компиляторы тем не менее это позволяют, они всё равно пишут warning при компиляции, потому что это не по текущему Стандарту.
Здравствуйте.
Есть DLL, созданная в MS Visual C++ 6.0. Есть исходники (собственно, весь проект есть). Используется она в VBA (вызывается из Екселя и Акса).
Я ее потихоньку дорабатывал, добавляя новые фичи. Делал это корректно и отладка не требовалась. Но вот она стала ронять и Ексель и Акс. Оба падают аварийно и закрываются.
В ней несколько функций. Одна из них (простенькая, работающая автономно от других) работает. Сама DLL компилируется нормально.
В аварийных окнах и Екселя, и Акса есть кнопка отладка. Она работает. А как мне ее (отладку) вызвать не роняя их (мне это как серпом)? Ну, типа стационарной точки останова (как Stop в VBA), чтобы без краша, законно в отладку попасть?
Есть DLL, созданная в MS Visual C++ 6.0. Есть исходники (собственно, весь проект есть). Используется она в VBA (вызывается из Екселя и Акса).
Я ее потихоньку дорабатывал, добавляя новые фичи. Делал это корректно и отладка не требовалась. Но вот она стала ронять и Ексель и Акс. Оба падают аварийно и закрываются.
В ней несколько функций. Одна из них (простенькая, работающая автономно от других) работает. Сама DLL компилируется нормально.
В аварийных окнах и Екселя, и Акса есть кнопка отладка. Она работает. А как мне ее (отладку) вызвать не роняя их (мне это как серпом)? Ну, типа стационарной точки останова (как Stop в VBA), чтобы без краша, законно в отладку попасть?
asbo
да, ни фига не понятно.
хоть ты и адвансед мембер, но умение задавать вопросы -- не твой конёк?
да, ни фига не понятно.
хоть ты и адвансед мембер, но умение задавать вопросы -- не твой конёк?
akaGM
да все понятно, хочет отладить dll при этом не уронив excel.
asbo
Во время работы не креша, запустить VS Debugger и приаттачится к экселю, ну а там дальше лазить по стекам и по отладочной инфе, возмножно студия позволит подгрузить исходники от dll. Полазить по ссылкам
http://yandex.ru/yandsearch?text=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll&lr=971
http://www.google.ru/#hl=ru&source=hp&q=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll+visual+studio&aq=1&aqi=g4&aql=&oq=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll&fp=ffceaa18804c5a87&biw=1673&bih=857
да все понятно, хочет отладить dll при этом не уронив excel.
asbo
Во время работы не креша, запустить VS Debugger и приаттачится к экселю, ну а там дальше лазить по стекам и по отладочной инфе, возмножно студия позволит подгрузить исходники от dll. Полазить по ссылкам
http://yandex.ru/yandsearch?text=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll&lr=971
http://www.google.ru/#hl=ru&source=hp&q=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll+visual+studio&aq=1&aqi=g4&aql=&oq=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+dll&fp=ffceaa18804c5a87&biw=1673&bih=857
KF121
Цитата:
ладно, +1!
Цитата:
да все понятно
ладно, +1!
KF121, снкс. Буду пробовать. Доложусь. А точка останова не ставится, как в VBA?
akaGM
Цитата:
Я все думал - поподробней расписать или по-дурацки спросить. Решил поподробней :) Тем более, что я с этим C++ исключительно на "Вы" в капсе и красным болдом...
А про умение задавать-отвечать... Это ведь по-разному мозги у всех скроены. Как-то по VBA чел задает вопрос - я въезжал-въезжал... и плюнул. На утро снова не въехал. Другой мембер с ходу ответил. Я ему в личку написал - как, мол, ты понял-то, что он хочет? Он отшутился :) И вот, имея ответ на руках, я как со словарем (уже для интересу) въезжал в вопрос.
А чо сразу адвансед? Вон - зэвэры иногда такое постанут, так хоть стой, хоть падай... Ты вот, хоть и сильвер, а ответить не смог. Не твой конек?
Добавлено:
KF121
Увы, ничего не получилось :( Подключиться к Екселю не могу - список процевв пуст. Галка показвать системные не помогает. Совсем пусто... Выставил по рекомендациям, но тоже не повлияло:
Цитата:
Цитата:
Работы, как таковой, у этой DLL нет - из нее вызывается функция, обсчитывает данные и хранит их в себе. Результат вычислений другая ее ф-ция отдает. И так в цикле. Одна строчка, и другая. Первая еще есть - инициализация. Как ее остановить - она раз, и выполнилась...
В случае крэша я попадаю в дебаггер, но цикл ужЕ прерван - Екселю схлопнулся. Без цикла нефиг там смотреть...
akaGM
Цитата:
ни фига не понятно.
хоть ты и адвансед мембер, но умение задавать вопросы -- не твой конёк?
Я все думал - поподробней расписать или по-дурацки спросить. Решил поподробней :) Тем более, что я с этим C++ исключительно на "Вы" в капсе и красным болдом...
А про умение задавать-отвечать... Это ведь по-разному мозги у всех скроены. Как-то по VBA чел задает вопрос - я въезжал-въезжал... и плюнул. На утро снова не въехал. Другой мембер с ходу ответил. Я ему в личку написал - как, мол, ты понял-то, что он хочет? Он отшутился :) И вот, имея ответ на руках, я как со словарем (уже для интересу) въезжал в вопрос.
А чо сразу адвансед? Вон - зэвэры иногда такое постанут, так хоть стой, хоть падай... Ты вот, хоть и сильвер, а ответить не смог. Не твой конек?
Добавлено:
KF121
Увы, ничего не получилось :( Подключиться к Екселю не могу - список процевв пуст. Галка показвать системные не помогает. Совсем пусто... Выставил по рекомендациям, но тоже не повлияло:
Цитата:
... чтобы при запуске приложения отладчик загружал отладочные символы нашей DLL... явно потребовать загрузку отладочных символов. Для этого следует добавить её в список Additional DLLs в настройках отладки.Выставляемые точки останова (F9) не подхватываются.
Цитата:
Во время работы не креша, запустить VS Debugger и приаттачится к экселю
Работы, как таковой, у этой DLL нет - из нее вызывается функция, обсчитывает данные и хранит их в себе. Результат вычислений другая ее ф-ция отдает. И так в цикле. Одна строчка, и другая. Первая еще есть - инициализация. Как ее остановить - она раз, и выполнилась...
В случае крэша я попадаю в дебаггер, но цикл ужЕ прерван - Екселю схлопнулся. Без цикла нефиг там смотреть...
asbo
Может добавить в эту длл логирование и писать всё подозрительное?
Может добавить в эту длл логирование и писать всё подозрительное?
KChernov
Ошибку я нашел - пытался присвоить значения массиву до переопределения его размерности :)
Но вопрос попадания в отладку не снимается. Логированием можно было бы обойтись, но у меня практических навыков в C++ ноль. Если не сложно - покажите образец кода.
Ошибку я нашел - пытался присвоить значения массиву до переопределения его размерности :)
Но вопрос попадания в отладку не снимается. Логированием можно было бы обойтись, но у меня практических навыков в C++ ноль. Если не сложно - покажите образец кода.
Цитата:
Увы, ничего не получилось Подключиться к Екселю не могу - список процевв пуст. Галка показвать системные не помогает. Совсем пусто... Выставил по рекомендациям, но тоже не повлияло:
Это фича/баг VS6, накатите один из последних сервис паков. а лучше перейдите на что нить более новое.
Цитата:
Работы, как таковой, у этой DLL нет - из нее вызывается функция, обсчитывает данные и хранит их в себе. Результат вычислений другая ее ф-ция отдает. И так в цикле. Одна строчка, и другая. Первая еще есть - инициализация. Как ее остановить - она раз, и выполнилась...
В случае крэша я попадаю в дебаггер, но цикл ужЕ прерван - Екселю схлопнулся. Без цикла нефиг там смотреть...
советую как и KChernov добавить логирование для начала можно не в dll а в VBA, к примеру сохранять в файл все параметры вызова dll функций. и потом анализить последние записи. идти в длл в уме подставлять значнния и попробовать выяснить где падает. нет, так напсиать маленькое приложение кторое будет вызывать функции из dll с теми параметрами кторые были сохранены на предыдущем шаге. Еще как вариант, добавить пару обработчиков эксепшенов. мотри если падать dll не будет и excel живой лостанется.
KF121
*накатите один из последних сервис паков.
ОК. СП поищу. Конкретный номер не порекомендуешь?
* а лучше перейдите на что нить более новое
У меня VS8 параллельно стоит. Бзв - а она не может мешать?
Но код, скомпилированный в ней, хоть и рабочий, но в существенно медленнее. А тут скорострельность критична - много данных + тяжелая математика.
* добавить логирование для начала можно не в dll а в VBA
В VBA это ужЕ все сделано :) Да и прежде, чем внести изменения в dll, я их логику прокатываю под VBA и только после этого портирую.
* добавить пару обработчиков эксепшенов
Это мне с нуля надо изучать язык :(
*накатите один из последних сервис паков.
ОК. СП поищу. Конкретный номер не порекомендуешь?
* а лучше перейдите на что нить более новое
У меня VS8 параллельно стоит. Бзв - а она не может мешать?
Но код, скомпилированный в ней, хоть и рабочий, но в существенно медленнее. А тут скорострельность критична - много данных + тяжелая математика.
* добавить логирование для начала можно не в dll а в VBA
В VBA это ужЕ все сделано :) Да и прежде, чем внести изменения в dll, я их логику прокатываю под VBA и только после этого портирую.
* добавить пару обработчиков эксепшенов
Это мне с нуля надо изучать язык :(
asbo
Цитата:
В простейшем виде надо просто открыть файл на запись и писать туда сообщения (и как-то сделать, чтобы в аварийной ситуации он закрывался).
Но лучше наверное что-нибудь готовое использовать - пусть знающие люди подскажут.
Цитата:
Логированием можно было бы обойтись, но у меня практических навыков в C++ ноль. Если не сложно - покажите образец кода.
В простейшем виде надо просто открыть файл на запись и писать туда сообщения (и как-то сделать, чтобы в аварийной ситуации он закрывался).
Но лучше наверное что-нибудь готовое использовать - пусть знающие люди подскажут.
люди никто не может код написать, как в лист боксе две строки местами поменять. чета голова кругом идет этих индексов.
Можно ли (и как) найти нендлер открытого файла по его имени. Файл открыт программой верхнего уровня средствами Фортрана, где такового понятия нет, ессно.
kkuuhhaa
тебе лучше в конкретный топ:
http://forum.ru-board.com/topic.cgi?forum=33&topic=0555#1
Цитата:
ну как же?
у виндовского фортрана есть полный доступ к Win API:
OpenFile(), lopen(), lcreat()
например,
FUNCTION OpenFile(lpFileName, lpReOpenBuff, uStyle)
integer(HFILE) :: OpenFile
тебе лучше в конкретный топ:
http://forum.ru-board.com/topic.cgi?forum=33&topic=0555#1
Цитата:
Файл открыт программой верхнего уровня средствами Фортрана, где такового понятия нет, ессно.
ну как же?
у виндовского фортрана есть полный доступ к Win API:
OpenFile(), lopen(), lcreat()
например,
FUNCTION OpenFile(lpFileName, lpReOpenBuff, uStyle)
integer(HFILE) :: OpenFile
akaGM
Там что ли повторить тему?
Про доступ знаю, не знаю как это сделать. Доступ нужен к файлу, открытому той же программой.
bomzzz
Уточню. Хендлер надо искать среди всех открытых файлов в системе?
Для файлов той же программы нет другого способа?
Там что ли повторить тему?
Про доступ знаю, не знаю как это сделать. Доступ нужен к файлу, открытому той же программой.
bomzzz
Уточню. Хендлер надо искать среди всех открытых файлов в системе?
Для файлов той же программы нет другого способа?
kkuuhhaa
Цитата:
http://forum.ru-board.com/topic.cgi?forum=33&topic=7860#1
так что давай вот это
Цитата:
1) программа на Фортране? если да, то тогда каким боком тут оказывается С++?
2) что ты понимаешь под "доступ к файлу, открытому той же программой"?
разве она не имеет доступа к тому что сама же и открыла?
3) и главное чтО ты хочешь сделать?
например, открывая файл штатными средствами фортрана, hfile в
Код: integer hfile/100/
open (hfile, file='filename.ext')
write(hfile, *) 10, 'akssdhshft', 3.14
close(hfile)
end
Цитата:
Там что ли повторить тему?да необязательно (если это не вопрос по чистому API на С++), может оказаться, что тебе вообще фортранный топик нужен по основам фортрана, и с этим лучше сюда:
http://forum.ru-board.com/topic.cgi?forum=33&topic=7860#1
так что давай вот это
Цитата:
Доступ нужен к файлу, открытому той же программой.уточняй...
1) программа на Фортране? если да, то тогда каким боком тут оказывается С++?
2) что ты понимаешь под "доступ к файлу, открытому той же программой"?
разве она не имеет доступа к тому что сама же и открыла?
3) и главное чтО ты хочешь сделать?
например, открывая файл штатными средствами фортрана, hfile в
Код: integer hfile/100/
open (hfile, file='filename.ext')
write(hfile, *) 10, 'akssdhshft', 3.14
close(hfile)
end
я тоже нифига не понял. под досом работа с файлами тоже хендл использовался. как может не быть хендла не пойму. че ха фортран такой
Добавлено:
я не понял что ты из того же процесса хочешь хендл получить. и если у тебя из фортрана есть возможность обращаться к апи функциям тем более непонятно куда хендл подевался
Добавлено:
я не понял что ты из того же процесса хочешь хендл получить. и если у тебя из фортрана есть возможность обращаться к апи функциям тем более непонятно куда хендл подевался
Да, файл открыт Open(unit=nnn... - стандартно
Надо средствами Си его писать-читать. Программа двуязычная (ну там есть и asm).
nnn- это не тот хендл, что в fopen. (или как?)
Ну какие ещё слова надо?
Сейчас закрываю файл в Фортране, что бы открыть его в Си. Хотелось бы от этого избавиться
Надо средствами Си его писать-читать. Программа двуязычная (ну там есть и asm).
nnn- это не тот хендл, что в fopen. (или как?)
Ну какие ещё слова надо?
Сейчас закрываю файл в Фортране, что бы открыть его в Си. Хотелось бы от этого избавиться
скорее всего тот. все равно ни фига не понятно. трех-язычная что ли программа?
Да, три языка. А хендл не подходит. Проверял. Ну не знаю как ещё обьяснить. В фортране написана программа разбора заголовка файла. Переписывать нет сил и времени, досттаточно логически навороченная. Работает и ладушки. А в си-асм файл массово считывается. Так быстрее намного, ну и там биг-литл ендиан преобразования.
номер логического устройства в Фортране -- это совсем не то же самое, что и дескриптор файла в С. Существуют функции преобразования, ищите.
напрямую диск что ли читаешь. хендл файла присваевает процессу система виндовс или дос, какой язык никакой разницы
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.