Присвоение двойных переменных динамическому двойному массиву - PullRequest
0 голосов
/ 24 февраля 2012

Я пытался присвоить значение другой переменной двойному массиву в цикле, но весь массив имеет только 1 значение

double *float_array;
float_array = new double [dynamic_variable]; // debugger does tell me its size     
stringstream ss1(line);

string s1;
string s2 = "2.1";
double test= atof(s2.c_str());
while (getline(ss1,s1,','))
{
    float_array[count] = atof(s1.c_str());
    count++;
}
count = 0;
root->data = float_array;
root->next = new node;

показывает еще немного кода

class node
{

public:
     double * data;
    node *next;
    node(void);
    ~node(void);
};

int _tmain(int argc, _TCHAR* argv[])
{
    double arr[4]= {0.689997};
    double * float_array;
    string file_name; 
    string line,token;
    string path= "D:\\DM\\Assignment No. 1\\";
    cin>>file_name;
     file_name= path + file_name;
     ifstream aa;
     aa.open(file_name,ios::in|ios::out);
     node *root; int float_arr_size=0;int count=0;
     //aa.open(file_name,ios::in|ios::out);
     if(aa.is_open())
     {

        while(!aa.eof())
        {
            aa>>line;
            cout<<line<<endl;
            cout<<endl;
            stringstream ss(line);
            string s;

            while (getline(ss, s, ','))
            {
            float_arr_size++;
            }

            float_array= new double[float_arr_size];
            s="";

            stringstream ss1(line);
            string s1;
            string s2= "2.1";
            double test= atof(s2.c_str());
            while(getline(ss1,s1,','))
            {
                float_array[count] =  atof(s1.c_str());
                count++;
            }
            count = 0;
            root->data =float_array;
            root->next= new node;
        }
     }
    aa.close();

    return 0;
}

Я получаю идеальное преобразование в моей тестовой переменной. Я также получаю «2.1» в s1, но в отладчике я получаю только одно значение в float_array - 5.0999945 Никакие дальнейшие индексы не имеют никаких дополнительных значений. После правильного преобразования значения тестовой переменной я вижу проблему в моем динамическом массиве.

Есть решение, пожалуйста?

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Код уже работает .C и C ++ являются низкоуровневыми языками, которые скрывают информацию от отладчика, но информация по-прежнему отображается с std::cout <<.

. Объедините это с возможностью ошибок, которые зависят от оптимизаций, которые могут сделатьотладчик практически бесполезен, и это хорошая идея, чтобы проверить функциональность программы без специальных инструментов.Немного не по теме для этого вопроса, но это может помочь объяснить общую направленность сообщества.

1 голос
/ 24 февраля 2012

В дополнение к комментариям о том, что отладчик не отображает весь массив, в Visual Studio Debugger для C / C ++ вы можете добавить часы вроде:

float_array,30

Это покажет вам 30 элементов массива. Имейте в виду, что это не динамично, и он с радостью покажет вам 30 элементов массива длины! Если вы хотите более дружественное поведение отладчика, вы можете использовать std :: vector. На самом деле, вам, вероятно, все равно стоит использовать std :: vector, если вы действительно не наслаждаетесь ручным управлением памятью.

Редактировать: ОК. Я заметил слово «назначение» в комментариях, так что, возможно, вас заставляют использовать ручное управление памятью:)

0 голосов
/ 24 февраля 2012

Что ж, единственная проблема, которую я вижу в вашем коде, заключается в том, что вы никогда не сохраняете количество элементов, которое вы поместили в float_array, поэтому я не понимаю, как вы можете определить это позже.

Из-за того, как указатели работают на C ++, большинство отладчиков, когда их спрашивают о двойном *, будут показывать только первый элемент массива. На самом деле, у отладчика нет возможности узнать, указывает ли этот указатель на отдельный элемент или массив (и если это динамически созданный массив, из скольких элементов он состоит) ... и это то, что я испытал с отладчиками Visual Studio и Eclipse CDT. Но ваши данные должны быть там, попробуйте ввести в вашем отладчике (или вывести на консоль) значение в float_array [1] или в float_array [2].

...