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

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

Восстановить пароль Регистрация
 
Intriguer
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 12
17.07.2013, 11:42     stack around the variable was corrupted масив через указатель #1
Такая проблема - создаю масив целых чисел через функцию с использованием указателей - выскакивает данная ошибка, хотя код работает верно, почитал - что где-то идет переполнение, но как избавиться ума не приложу...
Создается 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 11:42     stack around the variable was corrupted масив через указатель
Посмотрите здесь:

C++ Stack around the variable 'b' was corrupted
stack around the variable was corrupted C++
C++ Бинарные файлы и Stack around the variable was corrupted
Stack around the variable 's' was corrupted C++
C++ Stack around the variable was corrupted
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.07.2013, 11:50     stack around the variable was corrupted масив через указатель #2
Цитата Сообщение от Intriguer Посмотреть сообщение
Создается 4ре масива разной длины по-очередно
Где?
Цитата Сообщение от Intriguer Посмотреть сообщение
int _result;
Это не массив, а переменная целочисленная.
И почему ты к ней в своем коде
Цитата Сообщение от Intriguer Посмотреть сообщение
_result[_i]= _rand_val;
обращаешься, как к массиву, не понятно.

А за такие имена переменных: с подчеркиваниями в начале, девелоперу бы руки оторвать, да засунуть туда, откуда они выросли.
Intriguer
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 12
17.07.2013, 12:06  [ТС]     stack around the variable was corrupted масив через указатель #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 Посмотреть сообщение
с подчеркиваниями в начале, девелоперу бы руки оторвать
- такое требование к коду, не знаю зачем, но не моя прихоть))
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.07.2013, 12:39     stack around the variable was corrupted масив через указатель #4
Цитата Сообщение от Intriguer Посмотреть сообщение
- внутри функции это уже идет указатель
Ну и что? Указатель у тебя указывает не на массив, а на одну переменную.
Цитата Сообщение от Intriguer Посмотреть сообщение
и используется как цепочка адресов на элементы масива
А по факту у тебя на стеке не массив, а одна переменная. А если result указывает на переменную, то что за область памяти у тебя result[4], например?

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

Не по теме:

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



Добавлено через 37 секунд
Цитата Сообщение от Intriguer Посмотреть сообщение
здесь я сомневаюсь в правильности))
А ты подумай хорошо. Что у тебя есть, и к чему ты обращаешься.
Intriguer
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 12
17.07.2013, 13:09  [ТС]     stack around the variable was corrupted масив через указатель #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;
}
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.07.2013, 13:23     stack around the variable was corrupted масив через указатель #6
Как вариант, на первый взгляд, да, верно.
Yandex
Объявления
17.07.2013, 13:23     stack around the variable was corrupted масив через указатель
Ответ Создать тему
Опции темы

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