Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

CStdioFile - bad ptr (Visual C++)

612  1 2 3 4 5 6 7 8 9 все
Russman старожил12.05.06 17:25
Russman
NEW 12.05.06 17:25 
в ответ JacksonB 12.05.06 17:21
Лучше переделай сразу, как выше сказали.
---
Hе стpойте глaзки моему оpижину (2:463/244.30)
  scorpi_ скептик12.05.06 17:27
NEW 12.05.06 17:27 
в ответ voxel3d 12.05.06 17:22
В ответ на:
char *  ltoa ( long value, char * buffer, int radix );

Convert long integer value to string.
Converts a long integer value to a null-terminated string using the specified radix and stores the result in the given buffer. If radix is 10 and value is negative the string is preceded by the minus sign (-). With any other radix, value is always considered unsigned. buffer should be large enough to contain any possible value: (sizeof(long)*8+1) for radix=2.


  scorpi_ скептик12.05.06 17:29
NEW 12.05.06 17:29 
в ответ JacksonB 12.05.06 17:21
Ты бы объяснил русским языком, что программа должна делать.
  scorpi_ скептик12.05.06 17:31
NEW 12.05.06 17:31 
в ответ voxel3d 12.05.06 17:19
Может быть, потому, что stl и шаблоны сложны для двух месяцев?
Ему ж не самому их писать. Со стрингом работать проще чем с char*. Да и со стримами не сложнее чем с этим CStdioFile
Murr коренной житель12.05.06 17:33
Murr
NEW 12.05.06 17:33 
в ответ scorpi_ 12.05.06 17:00
Стандартно - при ексепшене, неотфиналеном, деструктор не будет вызван...
voxel3d коренной житель12.05.06 17:35
voxel3d
NEW 12.05.06 17:35 
в ответ scorpi_ 12.05.06 17:27
Это понятно было, я просто забыл порядок размещения объектов на стеке в виндовсе:
var_n, ..., var_1, EBP, return_adr, arg1, ..., arg_n.
Dropbox - средство синхронизации и бэкапа файлов.
  scorpi_ скептик12.05.06 17:36
NEW 12.05.06 17:36 
в ответ Murr 12.05.06 17:33
Не увиливай, вот этот бред сразу или при выходе из области определения - что значит?
  scorpi_ скептик12.05.06 17:38
NEW 12.05.06 17:38 
в ответ voxel3d 12.05.06 17:35
Локальные переменные в порядке декларации, порядок аргументов не определён. Только при чём тут это?
voxel3d коренной житель12.05.06 17:42
voxel3d
NEW 12.05.06 17:42 
в ответ scorpi_ 12.05.06 17:38, Последний раз изменено 12.05.06 17:43 (voxel3d)
При том, что если не знать в какую сторону растёт стек и как размещаются переменные, можно представить, например, такую картину:
var_1, var_2, ..., var_n
где var_1 это ofile (где хэндл портился), а var_2 это тот самый char, в который буфер пытались записать; при росте стека вверх и таком размещении, испортить ofile не удастся.
p.s. (слева меньшие адреса, справа большие)
Dropbox - средство синхронизации и бэкапа файлов.
Murr коренной житель12.05.06 17:48
Murr
NEW 12.05.06 17:48 
в ответ scorpi_ 12.05.06 17:36
Я и не увиливаю - если объект не используется он может быть разрушен сразу после вызова конструктора, равно как разрушение объекта может быть отложено до выполнения последнего оператора в текущем блоке. Второе - проще в реализации.
  scorpi_ скептик12.05.06 17:51
NEW 12.05.06 17:51 
в ответ voxel3d 12.05.06 17:42
Ясно. Стек растёт вниз, так что всё правильно, ltoa будет писать по ofile. Мне собственно было всё равно где он будет писать, ясно, что там где не положено...
Murr коренной житель12.05.06 17:53
Murr
NEW 12.05.06 17:53 
в ответ scorpi_ 12.05.06 17:38
Локальные переменные в порядке декларации, порядок аргументов не определён.
------
Да, внесли в стандарт порядок создания переменных... По моему - зря. Для скалярных можно выделять непрерывный блок, а не скалярные - определять в конструкторе...
Порядков - два. слева направо, справо налево. Какой именно используется надо смотреть в доках на компайлер... в стандарте вроде не было ограничений.
  scorpi_ скептик12.05.06 18:05
NEW 12.05.06 18:05 
в ответ Murr 12.05.06 17:48
В стандарте чётко определено когда вызывается деструктор. Так что объект либо будет разрушен после function return, либо вообще не будет создан.
Murr коренной житель12.05.06 18:31
Murr
12.05.06 18:31 
в ответ scorpi_ 12.05.06 18:05
Сути необходимых действий это не меняет, но еще раз доказывает, что мне надо найти время и перечитать стандарт. Хотя... писать приходится на всем, кроме С++...
JacksonB гость15.05.06 14:58
JacksonB
NEW 15.05.06 14:58 
в ответ scorpi_ 12.05.06 17:29
Программа читает файл по строчно, делает грамматический разбор каждой строчки. строка должна начинаться с объявления #define #ifdef ... и тому подобное, только тогда происходит разбор строки.
Со String действительно удобно работать, только возникают проблемы с е╦ конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
мне нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
не подскажите как можно сконвертировать или есть ли другие функции?
с iostream тоже много неопредел╦нности. как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
Simple Nothing is f*cked15.05.06 15:05
Simple
NEW 15.05.06 15:05 
в ответ JacksonB 15.05.06 14:58
У CString есть операторы для этого.
Остальное - читай книжки по STL, для форума это слишком объемный материал.
JacksonB гость15.05.06 15:12
JacksonB
NEW 15.05.06 15:12 
в ответ Simple 15.05.06 15:05
Прошу прощения за глупые вопросы.
Simple Nothing is f*cked15.05.06 15:13
Simple
NEW 15.05.06 15:13 
в ответ JacksonB 15.05.06 15:12
Глупых вопросов не бывает.
voxel3d коренной житель15.05.06 15:16
voxel3d
NEW 15.05.06 15:16 
в ответ JacksonB 15.05.06 14:58
> с iostream тоже много неопредел╦нности. как читает она строчку с файла
Ты имеешь в виду istream. Показали же: наследуешь класс от std::string и перегружаешь глобальный оператор >>. Про размер строки мысль не понял. Зачем его надо знать заранее?
Dropbox - средство синхронизации и бэкапа файлов.
Russman старожил15.05.06 15:19
Russman
NEW 15.05.06 15:19 
в ответ JacksonB 15.05.06 14:58
http://www.cppreference.com/
> Со String действительно удобно работать, только возникают проблемы с еe конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
c_str, atol, atoi
> не нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
Нет проблем, ставь в atoi сразу чар с хекс значением.
> как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
В этом-то и прелесть. Он просто читает строчку, неважно какой она длины.
---
Ничто так не согревает душу, как холодное пиво
1 2 3 4 5 6 7 8 9 все