Помогите Найти Ошибку

Тема в разделе "Общие вопросы по С и С++", создана пользователем Rendall, 5 окт 2012.

  1. Rendall

    Rendall Гость

    вроде бы все правильно написал, но при компиляции выбивает Снимок.PNG
    Код (C++):
    #include "stdafx.h"
    #include <clocale>
    #include <iostream>
    #include <ctime>
    #include <cstdio>

    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(0,"Rus");
    int rows,cols;
    cout<<"Введите количество строк\n";
    cin>>rows;
    cout<<"\nВведите количество столбцов";
    cin>>cols;
    //выделение памяти
    int ** mas = new int * [rows];
    for(int i=0; i<rows; ++i)
    *mas = new int [cols];
    //заполнение и вывод на экран
    srand(time(0));
    for(int i=0; i<rows; i++)
    {
    for(int j=0; j<cols; j++)
    {
    mas [i][j] = rand() %10;
    cout<< mas [i][j]<<" ";
    }
    cout<<"\n";
    }
    //удаление массива из памяти
    for (int i = 0; i < cols; i++)
    {
    delete [] mas[i];
    }
    delete [] mas;
    return 0;
    }
    P.S visual studio 2012
     
  2. Eleno4ka

    Eleno4ka Гость

    а можно попросить в кратце объяснить суть кода, что надо получить?
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    как минимум 2 ошибки:
    Код (Text):
        for (int i = 0; i < rows; ++i)
    [b]mas[i][/b] = new int [cols];
    Код (Text):
    for (int i = 0; i < [b]rows[/b]; i++) {
    delete [] mas[i];
     
  4. Rendall

    Rendall Гость

    двумерный массив из случайных чисел от 0 до 9, количество строк и столбцов вводится пользователем


    Добавлено:
    не понял, где там ошибки объясните пожалуста
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    int ** mas = new int * [rows]; // память выделено под rows строк
    for (int i = 0; i < cols; i++) // пытаемся освободить память из под cols строк

    for(int i=0; i<rows; ++i) // в цикле указатель на mas не изменяется, память выделяется по одному и тому же адресу
    *mas = new int [cols]; // всего по этому адресу будет доступно cols * sizeof(int) байт, а будет использоваться cols * rows * sizeof(int)
    //т.е. будем выходить за пределы выделенной памяти, и получать ошибки.
     
  6. Rendall

    Rendall Гость

    поправил, теперь, вроде бы, все работает как я хотел
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    #include "stdafx.h"
    #include <clocale>
    #include <iostream>
    #include <ctime>
    #include <cstdio>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(0,"Rus");
    int rows,cols;
    cout<<"Введите количество строк : ";
    cin>>rows;
    cout<<"\nВведите количество столбцов : ";
    cin>>cols;
    cout<<"Сгенерированный массив :\n\n";
    //выделение памяти
    int ** mas = new int * [rows];
    for(int i=0; i<rows; ++i)
    mas[i] = new int [cols];
    //заполнение и вывод на экран
    srand(time(0));
    for(int i=0; i<rows; ++i)
    {
    for(int j=0; j<cols; ++j)
    {
    mas [i][j] = rand() %10;
    cout<< mas [i][j]<<" ";
    }
    cout<<"\n";
    }
    cout<<"Данный массив занимает "<<sizeof(int)*rows*cols<<" байт в памяти\n";
    //удаление массива из памяти
    for (int i = 0; i < cols; i++)
    {
    delete [] mas[i];
    }
    delete [] mas;
    system("pause");
    return 0;
    }
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    не все, первую ошибку не исправил )
     
  8. Rendall

    Rendall Гость

    так верно ?

    Код (C++):
     
    //выделение памяти
    int ** mas = new int * [rows];
    for(int i=0; i<rows; ++i)
    mas[i] = new int [rows];
     
  9. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    комментарии к первой ошибке прочитай внимательно, не там правишь.
     
  10. Rendall

    Rendall Гость

    не понимаю(( вроде все правильно делаю
    Код (C++):
    int ** mas = new int * [rows];
    создал массив указателей
    Код (C++):
    for(int i=0; i<rows; i++)
    mas[i] = new int [cols];
    каждому указателю присвоил адрес одномерного массива
     
Загрузка...
Похожие Темы - Помогите Найти Ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.292
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    523
  3. Google313
    Ответов:
    0
    Просмотров:
    1.000
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.209
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.329

Поделиться этой страницей