Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 18:21   #1
Sabin4ik
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 80
По умолчанию Malloc

созрел вопрос! Как можно в с++ выделить память под 2-х мерный массив только за 1 обращение к malloc? Вот так можно:
((Ar=(int *)malloc(sizeof(int)*S*S)) ?
S-размерность
Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы
Sabin4ik вне форума Ответить с цитированием
Старый 16.02.2011, 19:54   #2
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
По умолчанию

можно через масив указателей сделать с помощью выделения через new
mansp вне форума Ответить с цитированием
Старый 16.02.2011, 20:07   #3
Sabin4ik
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от mansp Посмотреть сообщение
можно через масив указателей сделать с помощью выделения через new
Нужно без new а именно malloc
Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы
Sabin4ik вне форума Ответить с цитированием
Старый 16.02.2011, 20:07   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а сами не пробовали?

Код:
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;

int main()
{
	int *arr,**mas,n;

	cout<<"n = ";
	cin>>n;

	mas=(int**)malloc(sizeof(int)*n);
	for(int i=0;i<n;i++)
		*(mas+i)=(int*)malloc(sizeof(int)*n);

	arr=(int*)malloc(sizeof(int)*n*n);
	
	srand(time(NULL));

	cout<<"\narr =\n";
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			*(arr+i+j)=rand()%10;
			*(*(mas+i)+j)=*(arr+i+j);
			cout<<*(arr+i+j)<<"  ";
		}
		cout<<"\n";
	}

	cout<<"\nmas =\n";
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<*(*(mas+i)+j)<<"  ";
		}
		cout<<"\n";
	}

	_getch();
}
counter вне форума Ответить с цитированием
Старый 16.02.2011, 20:44   #5
Sabin4ik
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 80
По умолчанию

Counter, а вы не читаете первое сообщение?
Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы
Sabin4ik вне форума Ответить с цитированием
Старый 16.02.2011, 20:51   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Как можно в с++ выделить память
в с++ для выделения памяти используется new. В одну запись маллока или new нельзя выделить память под 2-х мерный массив.
NiCola999 вне форума Ответить с цитированием
Старый 16.02.2011, 20:56   #7
Sabin4ik
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 80
По умолчанию

очень уважаемый человек сказал, что можно(этот уважаемый человек-заведующий лабораторией Nokia). Вот осталось придумать как.
Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы
Sabin4ik вне форума Ответить с цитированием
Старый 16.02.2011, 21:33   #8
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

Да легко!


Код:
  typedef int MATRIX[5][5];

  MATRIX* p = (MATRIX*)malloc( 5 * 5 * sizeof(int) );

  for(int i=0; i<5; ++i)
    for(int j=0; j<5; ++j)
      (*p)[i][j] = ...;
Д_М вне форума Ответить с цитированием
Старый 16.02.2011, 22:28   #9
Sabin4ik
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 80
По умолчанию

Д_М, ну так никакой разницы от того, что я предложила...
Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы
Sabin4ik вне форума Ответить с цитированием
Старый 16.02.2011, 23:25   #10
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Можно так как ты написала. Вот код (на всякий случай) создания, заполнения и вывода двумерного массива.

Код:
  int* p = (int*)malloc(5*5*sizeof(int));

  for(int i=0; i<5; ++i)
    for(int j=0; j<5; ++j)
      p[i*5+j] = i+j;

    for(int i=0; i<5; ++i)
    {
        for(int j=0; j<5; ++j)
            cout <<  p[i*5+j] << endl;

        cout << '\n';
    }
NiCola999 можно.
Код:
  int* p = new int[5*5];

Последний раз редактировалось profi; 17.02.2011 в 00:04.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
malloc & calloc dn.xmk Общие вопросы C/C++ 12 25.01.2011 18:24
Размер массива не меняется (malloc, C++ ) RIO Общие вопросы C/C++ 5 01.12.2010 03:39
SIEGSEGV в malloc() TheVampire Общие вопросы C/C++ 0 25.09.2009 14:32
Проблема с malloc Обледеневший Общие вопросы C/C++ 7 14.09.2009 18:06
malloc free Ошибка. BeNN Общие вопросы C/C++ 19 09.07.2009 12:46