Форум программистов, компьютерный форум CyberForum.ru

Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Наследование http://www.cyberforum.ru/cpp-beginners/thread1117492.html
Всем привет. Может кто нибудь подсказать с чего начать при создании класса для работы с файлами на подобии ostream( а точнее как правильно реализовать методы open, close,seek,read,write) и возможно ли унаследовать их от самого класса ostream?
C++ Программа для расчета математического примера Помогите пожалуйста с кодом программы,заранее спасибо.Пример 10 http://www.cyberforum.ru/cpp-beginners/thread1117489.html
Класс рациональных дробей C++
Разработать класс рациональных дробей. Предусмотреть в нём все методы, которые необходимы, чтобы новый тип данных мог быть использован наравне с системными типами: арифметические операции, операции сравнения, преобразования тип. Программа выглядит вот-так: #include <iostream> #include <conio.h> #define show(x) #x << " = " << x << " " #define test(x) if(x) cout << #x << endl // Âû÷èñëåíèå...
C++ Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину.
Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину. Собственно вот проблема..Мне помогали писать данную программу но она что-то все равно не работает. Она просто тупо зависает. Может кто помочь объяснить что в ней не так? Мб я просто неправильно заполняю строки? #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream> using namespace...
C++ Работа с координатами векторов http://www.cyberforum.ru/cpp-beginners/thread1117478.html
Привет, ребята. Вновь пришёл к Вам с вопросами. Поставили задачу написать проект калькулятора, который будет выполнять операции с координатами векторов. На вход поступает 2 вектора, координаты каждого из которых x,y,z соответственно. Задача такая - как оформить координаты, чтобы было удобно работать с ними? //Пробовал делать x1,y1,z1,x2,y2,z2 переменными делать, но это быдло-код какой-то...
C++ Звуковой сигнал! #include <ctime> #include <stdio.h> #include <locale.h> #include <string> #include <conio.h> #include <windows.h> #include <iostream> using namespace std; подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
12.03.2014, 22:57     Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy
Я всё написал выше. При таком написании исходника - вероятность равна нулю, т.к. в памяти сначала будет лежать x, а потом y, и выход за границу x попадает в y. Если напишешь что-то типа:

C
#define size 1000
int x[size];
 
void func (void)
{
  int y[size + 1];
  memcpy(y, x, (size + 1) * sizeof(int));
  y[size] = 0;
}
то вероятность сломаться равна вероятности, что правая граница x попадёт точно на границу страницы. Правда тут тоже возникают "если". Если в библиотеке, с которым статически линкуется программа, есть глобальные данные, то они лягут справа от x, а потому выход за границу x попадёт в библиотечные переменные

Добавлено через 5 минут
В следующем коде я вместо того, чтобы создавать вероятность, гарантированно подогнал под требуемое условие: правая часть x лежит точно на границе страницы. На i386-linux этот код падает. На cigwin - нет (видимо, из-за библиотек, которые добавляют данные справа от x)

C
#include <string.h>
 
#define size 1024
int x[size] __attribute__((aligned(4096))) = { 0 };
 
int main (void)
{
  int y[size + 1];
  memcpy(y, x, (size + 1) * sizeof(int));
  y[size] = 0;
  return 0;
}
 
Текущее время: 06:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru