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

запрос указаной ячейки памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выделение динамической памяти http://www.cyberforum.ru/cpp-beginners/thread811745.html
Доброго времени суток! я начинающий программист, столкнулась с такой проблемой: выделяю память под динамический массив, например double **TrainingData; TrainingData=new double*; и в цикле TrainingData = new double; во-первых часть TrainingData=new double*;
C++ Ошибка на этапе выполнения при том, что программа выполняется до конца Есть матрица с заданным кол-вом столбцов и строк, которую надо сдвинуть, на выбор, во все 4 направления и наискосок. Программа, в принципе, работает, но часть, сдвигающая строку вправо, выдаёт ошибку, хотя даже последняя строка программы выполняется. И это удивительно. Вот урезанная программа с работающим без сбоев кодом и со сбоями (при выборе варианта 1 идёт сбой, а при 2 - всё впорядке).... http://www.cyberforum.ru/cpp-beginners/thread811744.html
C++ Взаимодействие программы и ОС
Помогите мне описать, пожалуйста, подробнее - как взаимодействуют между собой эта программа и операционная система?Прям очень надо(( #include "StdAfx.h" #include <windows.h> #include <iostream> #include <iomanip> #include <TCHAR.h> #include <time.h> #include <conio.h> #include <stdio.h>
C++ Случайные числа от -8 к 8
Как можно сделать рандомом числа от -8 к 8, нашел на форуме пример: int r=(rand() % 11) + 5;//от 0 до 10 и +5, то есть от 5 до 15 но как не фантазирую не выходит сделать от -8 к 8.
C++ Ошибка при работе с мютексом http://www.cyberforum.ru/cpp-beginners/thread811719.html
Пытаюсь написать класс защищенный стек, но получаю ошибку при работе с мютексом: error C2248: std::mutex::mutex: невозможно обратиться к private член, объявленному в классе "std::mutex" Вот описание класса: template <class Type> class locked_stack { private: mutex m; stack<Type> stck; public: locked_stack(){} public:
C++ Дан файл, содержащий сведения о химических элементах Помогите создать программу. Дан файл, содержащий сведения о химических элементах: название, символическое обозначение, массу атома, заряд ядра. Вывести сведения о химическом элементе по его символическому названию. Найти элемент с самой большой массой и наименьшим зарядом ядра. Буду благодарен. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
19.03.2013, 01:18     запрос указаной ячейки памяти
Цитата Сообщение от Croessmah Посмотреть сообщение
realloc. То есть попытаться выделить недостающую память сразу за уже выделенным под матрицу участком
Да не. ТС не знает, да и вы ошибаетесь. Коль скоро массив динамический, то это значит, что строки матрицы абсолютно не обязаны следовать одна за другой. Допустим, в матрице элементов типа int пять столбцов. Имеем нулевую строку. Вот она закончилась, а будет за ней следующая строка или следующая будет лежать где-нибудь за тридевять земель- это уж как карта ляжет. То есть нет понятия- выделенный участок памяти под матрицу. Соответственно, после него ничё нельзя выделить. (Если бы матрица была статической- тогда другое дело.) Небольшой эксперимент:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main () {
 
 int kol_vo_strok= 3;
 int kol_vo_stolbtsov= 5;
 
 //Выделяем память под указатели на строки
 int**p= new int* [kol_vo_strok];
 
 //Выделяем память под строки и смотрим где они располагаются
 for (int i= 0; i< kol_vo_strok; i++) {
  p[i]= new int [kol_vo_stolbtsov]; 
  printf ("%x\n", p[i]);
 }
 
 getchar ();
 return 0;
}
Ну и вывод:
Bash
1
2
3
3e24b0
3e24d0
3e24f0
Комментарии как говорится, излишни. Если бы располагалась строка за строкой, то картина выглядела бы так:
Bash
1
2
3
3e24b0
3e24C4
3e24D8
+++++++++++++++++++++++++++++++++++++++++++++++

Ну может вы имели ввиду, что при добавлении колонки к таблице, (если идти путём который хочет ТС, то есть без перекопирования) нужно просто к каждой строке добавлять одну ячейку памяти. Тогда можно эту ячейку выделять заранее, например так:

C++
1
p[i]= new int [kol_vo_stolbtsov+ 1];
Вот и всё. Спокойно работаем, используя kol_vo_strok и kol_vo_stolbtsov как размеры матрицы. А когда надо будет добавить или даже вставить колонку- место под неё уже выделено. Так и опять тут без копирования элементов не обойтись.

Но всё это чисто эксперимента ради, правильно всё-таки перекопировать.
 
Текущее время: 19:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru