Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 6
1

Динамическое выделение памяти

28.04.2013, 20:21. Просмотров 450. Ответов 7
Метки нет (Все метки)

Здравствуйте, у меня вопросик такой: почему при "динамическом выделении памяти в строку" у меня вылетает программа!? а при обычном выделении(в исходники закомментировал) работает корректно!? мож я не правильно обращаюсь к элементам массива!? В общем помогите разобраться

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <stdlib.h> // для доступа к srand
#include <time.h> // для доступа к time
#include <clocale>//вкл. рус. яз.
#include "mpi.h"
 
int _tmain(int argc, char* argv[])
{
    setlocale(0, "rus");
    int myid, size;
    MPI_Init(&argc, &argv);//инициализирую MPI
 
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);//получаю номер текущего процесса
    MPI_Comm_size(MPI_COMM_WORLD, &size);//получаю кол-во процессов
    
    int i, j, n=10;//n-размерность матриц
 
    int **A=new int*[n];//динамически в строку
    A[0]=new int[n*n];
    for(i=1; i<n; i++)
        A[i]=A[0]+n*i;
        
    /*int **A;
    A=new int*[n];
    for(i=0; i<n; i++)
        A[i]=new int[n];*/
    time_t t; // текущее время - для инициализации генератора случайных чисел
    srand((unsigned) time(&t)); // инициализация генератора случ. чисел
    for(i=0; i<n; i++)//рандомно заполняю массив A
    {
        for(j=0; j<n; j++)
        {
            A[i][j]=rand()%2;
            printf("%d ", A[i][j]);
        }
        printf("\n");
    }
    //...
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2013, 20:21
Ответы с готовыми решениями:

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Динамическое выделение памяти
Доброго времени! Прошу помощи, программа не работает. До момента сдвига главной диагонали все...

Динамическое выделение памяти
Всем привет, читал про динам. выделение памяти и тут возник вопрос. Так как для новичков пишут...

Динамическое выделение памяти
Динамически выделить память под N элементов вещественного типа float. Разработать алгоритм и...

7
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.04.2013, 20:38 2
А как вы его удаляете? Наверняка дело в этом, потому что я что-то не вижу здесь ничего неправильного.
0
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 6
28.04.2013, 20:49  [ТС] 3
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
А как вы его удаляете? Наверняка дело в этом, потому что я что-то не вижу здесь ничего неправильного.
Разве, отсутствие строк delete может быть причиной завершения проги, с всплывающим окошком(на скрине)!? В данном случае будет мусор в памяти, не так ли!?
0
Миниатюры
Динамическое выделение памяти  
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.04.2013, 21:42 4
В принципе может, если навыделять памяти слишком много, но не особождать её. Тогда следующая попытка выделения облажается и прибьёт программу (если специально не защититься).

Но проблема явно в не в приведённом куске кода. Ищите её в том, что скрыто за "// ..."
0
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 6
28.04.2013, 22:39  [ТС] 5
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
В принципе может, если навыделять памяти слишком много, но не особождать её. Тогда следующая попытка выделения облажается и прибьёт программу (если специально не защититься).

Но проблема явно в не в приведённом куске кода. Ищите её в том, что скрыто за "// ..."
Но ведь если выделить память другим способом, как в комментарии, то все работает хорошо... ,к сожалению, мне не подходит такой вариант.
0
go
Эксперт С++
3639 / 1371 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
28.04.2013, 22:59 6
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Но проблема явно в не в приведённом куске кода.
Как это?
Цитата Сообщение от WapxaZ Посмотреть сообщение
A[0]=new int[n*n];
Цитата Сообщение от WapxaZ Посмотреть сообщение
A[i][j]=rand()%2;
Смотри эти строки.
1
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.04.2013, 23:16 7
Цитата Сообщение от go Посмотреть сообщение
Смотри эти строки.
А как же эти?
C++
1
2
for(i=1; i<n; i++)
    A[i]=A[0]+n*i;
2
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 6
29.04.2013, 19:22  [ТС] 8
C++
1
printf("Всем спасибо, тему можно закрывать.\n По неизвестной мне причине, после перезагрузки всё заработало ;)");
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2013, 19:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Динамическое выделение памяти
Имеется: #define Index 1000 typedef int BaseType; typedef BaseType TMemList; typedef ...

Динамическое выделение памяти
Всем здрасти.Если выделять динамически память,например: char *p=new char; и при этом не...

Динамическое выделение памяти!
Программа должна читать с клавы число и имя(до 15 символов). Данные должны вводится в одной функции...

Динамическое выделение памяти
Почему распечатка матрицы Matr1 в f2 дает матрицу из ед., а в f1 матрицу из нулей? Ведь адрес...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.