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

stack around the variable was corrupted масив через указатель

17.07.2013, 11:42. Просмотров 504. Ответов 5
Метки нет (Все метки)

Такая проблема - создаю масив целых чисел через функцию с использованием указателей - выскакивает данная ошибка, хотя код работает верно, почитал - что где-то идет переполнение, но как избавиться ума не приложу...
Создается 4ре масива разной длины по-очередно, каждый масив внутри функции заполняется уникальными (неповторяющимися) числами по всему диапазону.
Помогите пожалуйста.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
 
 
void GenerateRandomArray(
  int * _result, // возвращаемыймассив
  unsigned int _maxValue// максимальное число в последовательности
 )
{
    int _i, _j;
    int _dup_flag;
    int _rand_val;
    cout << "maxValue " << _maxValue << '\n';
    for ( _i= 0; _i<_maxValue; _i++ )
    {
        for ( ; ; ) 
        {
            _rand_val=1 + rand()%_maxValue;
            _dup_flag= 0;
            for ( _j= 0; _j<_i; _j++ ) 
            {
                if ( _rand_val == _result[_j] )
                {
                    _dup_flag= 1; break; 
                }
            }
            if ( !_dup_flag ) 
            {
                break; 
            }
        }
    _result[_i]= _rand_val;
    cout << _result[_i] << " ";
  }
  cout << '\n';
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    srand(time(0));
    int _result;
    unsigned int _maxValue;
    for (int _i=0;_i<4;_i++)
    {
        _maxValue=rand()%11+5;
        GenerateRandomArray(&_result,_maxValue);
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2013, 11:42
Ответы с готовыми решениями:

Stack around the variable was corrupted
Непонятно, почему возникает данная ошибка, причем она возникает на том моменте, когда уже нет...

Stack around the variable 'e' was corrupted
Программа работает, но после закрытия консоли пишет ошибку &quot;Stack around the variable 'e' was...

Stack around the variable was corrupted
Здравствуйте! Есть код и ошибка, которую не могу найти в коде 2 суток. Может кто-то заметит. Слышал...

Stack around the variable 'b' was corrupted
Помогите разобраться почему вот эта программа: #include &lt;stdio.h&gt; int main() { short b,k=0;...

5
Почетный модератор
7336 / 2601 / 270
Регистрация: 29.07.2006
Сообщений: 13,588
17.07.2013, 11:50 2
Цитата Сообщение от Intriguer Посмотреть сообщение
Создается 4ре масива разной длины по-очередно
Где?
Цитата Сообщение от Intriguer Посмотреть сообщение
int _result;
Это не массив, а переменная целочисленная.
И почему ты к ней в своем коде
Цитата Сообщение от Intriguer Посмотреть сообщение
_result[_i]= _rand_val;
обращаешься, как к массиву, не понятно.

А за такие имена переменных: с подчеркиваниями в начале, девелоперу бы руки оторвать, да засунуть туда, откуда они выросли.
0
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 12
17.07.2013, 12:06  [ТС] 3
Цитата Сообщение от Vourhey Посмотреть сообщение
Где?
C++ (Qt)
1
2
3
4
5
for (int _i=0;_i<4;_i++)
    {
        _maxValue=rand()%11+5;
        GenerateRandomArray(&_result,_maxValue);
    }
Цитата Сообщение от Vourhey Посмотреть сообщение
обращаешься, как к массиву, не понятно.
Цитата Сообщение от Intriguer Посмотреть сообщение
int * _result
- внутри функции это уже идет указатель, и используется как цепочка адресов на элементы масива, просто в мейне и в функции переменные под одним именем, возможно в мейне нужно описать как масив... здесь я сомневаюсь в правильности))
Цитата Сообщение от Vourhey Посмотреть сообщение
с подчеркиваниями в начале, девелоперу бы руки оторвать
- такое требование к коду, не знаю зачем, но не моя прихоть))
0
Почетный модератор
7336 / 2601 / 270
Регистрация: 29.07.2006
Сообщений: 13,588
17.07.2013, 12:39 4
Цитата Сообщение от Intriguer Посмотреть сообщение
- внутри функции это уже идет указатель
Ну и что? Указатель у тебя указывает не на массив, а на одну переменную.
Цитата Сообщение от Intriguer Посмотреть сообщение
и используется как цепочка адресов на элементы масива
А по факту у тебя на стеке не массив, а одна переменная. А если result указывает на переменную, то что за область памяти у тебя result[4], например?

Добавлено через 54 секунды
Цитата Сообщение от Intriguer Посмотреть сообщение
- такое требование к коду, не знаю зачем, но не моя прихоть))

Не по теме:

Оторвать руки тому, кто coding style guide такой писал.



Добавлено через 37 секунд
Цитата Сообщение от Intriguer Посмотреть сообщение
здесь я сомневаюсь в правильности))
А ты подумай хорошо. Что у тебя есть, и к чему ты обращаешься.
0
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 12
17.07.2013, 13:09  [ТС] 5
Vourhey, ты мой герой)))) теперь верно? главное работает и ушло переполнение)))
C++ (Qt)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// GenerateRandomArray.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
 
 
void GenerateRandomArray(
  int * _result, // возвращаемыймассив
  unsigned int _maxValue// максимальное число в последовательности
 )
{
    int _i, _j;
    int _dup_flag;
    int _rand_val;
    cout << "maxValue " << _maxValue << '\n';
    for ( _i= 0; _i<_maxValue; _i++ )
    {
        for ( ; ; ) 
        {
            _rand_val=1 + rand()%_maxValue;
            _dup_flag= 0;
            for ( _j= 0; _j<_i; _j++ ) 
            {
                if ( _rand_val == _result[_j] )
                {
                    _dup_flag= 1; break; 
                }
            }
            if ( !_dup_flag ) 
            {
                break; 
            }
        }
    _result[_i]= _rand_val;
   // cout << _result[_i] << " ";
  }
  cout << '\n';
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    srand(time(0));
    int _result[15];
    unsigned int _maxValue;
    for (int _i=0;_i<4;_i++)
    {
        _maxValue=rand()%11+5;
        GenerateRandomArray((int*)_result,_maxValue);
        for (unsigned int _i=0;i<_maxValue;i++)
            cout << _result[_i];
    }
    system("pause");
    return 0;
}
0
Почетный модератор
7336 / 2601 / 270
Регистрация: 29.07.2006
Сообщений: 13,588
17.07.2013, 13:23 6
Как вариант, на первый взгляд, да, верно.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2013, 13:23

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

Stack around the variable 'i' was corrupted
Создать массив указателей на функцию. Ввести цифру, которая обозначает функцию, которую необходимо...

Stack around the variable was corrupted
void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double c,x,y,f; char k;...

Stack around the variable 's' was corrupted
Помогите, пожалуйста, решить проблему.При большом вводе: &quot;Stack around the variable 's' was...

Stack around the variable 's' was corrupted
Помогите разобраться! Не пойму почему иногда при использовании в программе переменных char при...


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

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

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