Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рантайм ошибка при выделении памяти 
V
    Опции темы
Severyanin
Дата 30.11.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



Привет всем. Написал консольную прогу, которая дергает данные из Аксесса, делает некие преобразования и кладет результат обратно. Компилится все нормально , но на строке
Код

alpha = new float[num_rows];
 
кидает ексепшен, что была попытка обращения к защищенной памяти. Среда MS VC 2005 Express Edition. Весь код:
Код

#include "stdafx.h"
#include <conio.h>

#include <stdlib.h>
#include <malloc.h>
#include "Matrix.h"

using namespace System;
using namespace System::Data;
using namespace System::Data::OleDb;
using namespace System::Threading;


int main(array<System::String ^> ^args)
{
    OleDbConnection conn;// = gcnew OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=params.mdb");
    OleDbCommand params_command;
    OleDbDataAdapter params_adapter;
    OleDbDataReader^ reader; //= gcnew OleDbDataReader();
    Random^ randObj = gcnew Random();
    TValueZeros zeros[4];
    TValueParams *params, SKO1, SKO2, SKO3, SKO4, SKO, M;
    float koeff, koeff1,koeff2,koeff3,koeff4;
    float *alpha, *beta, *V1, *V2, *V3, *V4;
    int num_rows = 0,i = 0, j = 0; 
    
    conn.ConnectionString = L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+args[1];
    // Open Database
    if((args[0] == "-f") || (args[0] == "-z"))
    {
        conn.Open();
    
        if(conn.State != ConnectionState::Open)
        {
            Console::WriteLine(L"Error was occured:");
            Console::WriteLine(conn.State);
        }
        else
        {
            Console::WriteLine(L"Connected to database successfully!");
        }
    
        params_command.Connection = %conn;
        params_command.CommandText = L"SELECT * FROM zeros";
        params_command.Prepare();
        reader = params_command.ExecuteReader();
        for(i = 0; i<4; i++)
        {
            initialize_zeros(&zeros[i]);
        }
        i=0;
        while (reader->Read()) 
        {
            Console::WriteLine(L"{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", reader->GetInt32(0),reader->GetFloat(1),reader->GetFloat(2),reader->GetFloat(3),reader->GetFloat(4),reader->GetFloat(5),reader->GetFloat(6),reader->GetFloat(7));
            zeros[i].Rb = reader->GetFloat(1);
            zeros[i].Rgr = reader->GetFloat(2);
            zeros[i].dudi = reader->GetFloat(3);
            zeros[i].Cgr = reader->GetFloat(4);
            zeros[i].Rbpl = reader->GetFloat(5);
            zeros[i].Rgrpl = reader->GetFloat(6);
            zeros[i].Rrast = reader->GetFloat(7);
            i++;
        }
        Console::WriteLine(L"Records affected from zeros table: {0}",i);
        reader->Close();
        params_command.CommandText = L"SELECT * FROM params";
        params_command.Prepare();
        reader = params_command.ExecuteReader();
        
        params = new TValueParams[reader->RecordsAffected];
        i=0;
        while (reader->Read())
        {
            params[i].id       = reader->GetInt32(0);
            params[i].Rb       = reader->GetFloat(23);
            params[i].Rgr      = reader->GetFloat(24);
            params[i].dudi     = (reader->GetFloat(5) - reader->GetFloat(3))/(reader->GetFloat(4) - reader->GetFloat(2));
            params[i].Cgr      = reader->GetFloat(25);
            params[i].Rbpl     = reader->GetFloat(30);
            params[i].Rgrpl    = reader->GetFloat(31);
            params[i].Rrast    = reader->GetFloat(37);
            //params[i].Category = reader->GetInt32(57);
            Console::WriteLine(L"{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", params[i].id,params[i].Rb,params[i].Rgr,params[i].dudi,params[i].Cgr,params[i].Rbpl,params[i].Rgrpl,params[i].Rrast);
            i++; 
        }
        Console::WriteLine(L"Records affected: {0}",i);
        num_rows = i;
        reader->Close();
        
        //Calculating all needed statistic variables
        SKO  = get_SKO(params,num_rows);
        SKO1 = get_SKO_by_category(params,num_rows,1);
        SKO2 = get_SKO_by_category(params,num_rows,2);
        SKO3 = get_SKO_by_category(params,num_rows,3);
        SKO4 = get_SKO_by_category(params,num_rows,4);
        koeff  = get_vector_norm(SKO);
        koeff1 = get_vector_norm(SKO1);
        koeff2 = get_vector_norm(SKO2);
        koeff3 = get_vector_norm(SKO3);
        koeff4 = get_vector_norm(SKO4);
        
        //Calculating the additional numeric sequences and the error vectors by all corruption categories 
        alpha = new float[num_rows];
        beta  = new float[num_rows];
        //alpha = (float*)calloc(num_rows, sizeof(float));
        //beta = (float*)calloc(num_rows, sizeof(float));
          
        V1 = new float[num_rows];
        V2 = new float[num_rows];
        V3 = new float[num_rows];
        V4 = new float[num_rows];
        /*V1 = (float*)calloc(num_rows, sizeof(float));
        V2 = (float*)calloc(num_rows, sizeof(float));
        V3 = (float*)calloc(num_rows, sizeof(float));
        V4 = (float*)calloc(num_rows, sizeof(float));*/
        
        for(i = 0; i<num_rows; i++)
        {
            alpha[i] = 0;
            beta[i]  = 0;

            V1[i] = koeff1*randObj->Next();
            V2[i] = koeff2*randObj->Next();
            V3[i] = koeff3*randObj->Next();
            V4[i] = koeff4*randObj->Next();
        }
        
        //main algorithm
        M = get_M(params, num_rows);
        zeros[0] = calc_cat_centers(M, zeros[0], alpha, beta, params, num_rows);
        zeros[1] = calc_cat_centers(M, zeros[1], alpha, beta, params, num_rows);
        zeros[2] = calc_cat_centers(M, zeros[2], alpha, beta, params, num_rows);
        zeros[3] = calc_cat_centers(M, zeros[3], alpha, beta, params, num_rows);
        
        for(i = 0; i<4; i++)
        {
            params_command.CommandText = L"UPDATE zeros SET Rb="+zeros[i].Rb+",Rgr="+zeros[i].Rgr+",dudi="+zeros[i].dudi+",Cgr="+zeros[i].Cgr+",Rbplus="+zeros[i].Rbpl+",Rgrplus="+zeros[i].Rgrpl+",Rrast="+zeros[i].Rrast+" WHERE id="+(i+1);
            params_command.Prepare();
            params_command.ExecuteNonQuery();
        }
        
        if(args[0] == "-f")
        {
            for(i = 0; i<num_rows; i++)
            {
                params[i].Category = get_new_category(params[i],zeros);
                params_command.CommandText = L"UPDATE params SET Kategory="+params[i].Category+" WHERE id="+params[i].id;
                params_command.Prepare();
                params_command.ExecuteNonQuery();
            }
        }
        // Close Connection
        if (conn.State != ConnectionState::Closed)
        {
            conn.Close();
        }
        Console::WriteLine(L"The database connection is now closed");
        
        //releasing the resources
        delete[] params;
        delete[] alpha;
        delete[] beta;
        delete[] V1;
        delete[] V2;
        delete[] V3;
        delete[] V4;
        /*free(alpha);
        free(beta);
        free(V1);
        free(V2);
        free(V3);
        free(V4);*/
        delete randObj;
    }
    else
    {
        Console::WriteLine(L"Error:The unsupported keyword");
    }
    getch();
    return 0;
}

Сначала грешил на то, что подзабыл С++ и неправильно применил выделение памяти через new для примитивного типа. Но с calloc тот же фокус. Заранее спасибо за помощь


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
17dufa
Дата 30.11.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



gcnew или как там его не поможет? а вообще managed c++ - это ахтунг
PM MAIL   Вверх
Severyanin
Дата 30.11.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



17dufa, да как-то со сборщиком мусора не хочется без нужды связываться


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
DrHex
Дата 30.11.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

да как-то со сборщиком мусора не хочется без нужды связываться 

В корне неправельно.
Чему i равна??
--------------------
google.com и это все.
PM MAIL   Вверх
Severyanin
Дата 30.11.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



DrHex,  27. 
[


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 30.11.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Цитата(Severyanin @  30.11.2009,  17:47 Найти цитируемый пост)
идает ексепшен, что была попытка обращения к защищенной памяти

возможно, где-то перед строкой
Код

lpha = new float[num_rows];

была произведена запись за пределами выделенной памяти


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Severyanin
Дата 1.12.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



Всем спасибо за участие. Вариант решения  GremlinProg оказался правильным)). За что ему отдельное спасибо). Тема закрыта 


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.