|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.06.2011, 15:42 | #1 |
Регистрация: 22.05.2011
Сообщений: 3
|
Бинарные файлы и Stack around the variable was corrupted
Добрый день.
Делаю программу (лабу), которая работает с бинарными файлами: Сначала заполняет бинарный файл случайным количеством случайных чисел, а затем - считывает этот файл, из последних его элементов строит матрицу из 25 элементов (5х5), а также подсчитывает сумму отрицательных элементов под главной диагональю. Компилятор MS Visual Studio 2010 при выходе из функции SetTheFile ругается на переменную buffer. Пишет диалоговое окно: Stack around the variable 'buffer' was corrupted. Подскажите, отчего это и как можно исправить? Причем, если в этом диалоговом окне нажать Continue - программа продолжит работать как положено. Код:
И еще дополнительно интересует... как реализовать, чтобы строить матрицу не с конца файла, а с элемента файла, указанного пользователем? Т.е. задаст счетчик рандомно 50 чисел, пользователь введёт например число 10, и чтоб матрица 5х5 составлялась из элементов с 10 по 35. |
04.06.2011, 16:02 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,695
|
Код:
|
04.06.2011, 16:23 | #3 |
Регистрация: 22.05.2011
Сообщений: 3
|
Ага, нуль-символ. Т.е. получается я буфер делаю размером 2 символа, к отрицательному числу помимо знака и цифры ещё и нуль-символ прибавляется, итого получается 3 символа. Понятно.
А как безболезненно исправить? Если в define значении BEFFERATOR поставить 3, вместо 2, а в fread и fwrite в параметрах использовать sizeof(buffer)-1, оно перестаёт ругаться на краш стека, но начинает ненормально стоить матрицу, т.е. из абсолютно левых значений. Последний раз редактировалось Borsch; 04.06.2011 в 16:37. |
04.06.2011, 16:54 | #4 |
Регистрация: 22.05.2011
Сообщений: 3
|
UPD Получилось. Установил размер #define BEFFERATOR 4, вместо #define BEFFERATOR 2.
А строку fseek(p, EOF-1-BEFFERATOR*(i*5+j), SEEK_END); заменил на fseek(p, EOF-3-BEFFERATOR*(i*5+j), SEEK_END); Благодарю за наводку про нуль-символы и размер буфера. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
run-time error 91 (object variable or with block variable not set) | mrs.petrushina | Microsoft Office Access | 5 | 19.04.2011 12:59 |
run-time error 91 (object variable or with block variable not set) | mrs.petrushina | Microsoft Office Excel | 7 | 05.04.2011 00:22 |
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. | Gidross | Общие вопросы C/C++ | 9 | 28.12.2010 15:22 |
un-time check failure #2-stack around the variable 't' was corrupted | Despar | Помощь студентам | 1 | 13.05.2010 10:17 |
run-time check failure #2-stack around the variable 't' was corrupted | Despar | Общие вопросы C/C++ | 1 | 13.05.2010 08:33 |