0

我试图在循环中为双数组分配不同的变量值,但整个数组只有 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。没有其他索引具有任何其他值。正确转换测试变量值后,我在动态数组中看到了问题。

请问有解决办法吗?

4

3 回答 3

1

该代码已经有效。C 和 C++ 是低级语言,在某种程度上倾向于向调试器隐藏信息,但信息仍以std::cout <<.

将其与依赖于优化的错误的可能性相结合,这可能会使调试器几乎无用,并且在没有特殊工具的情况下验证程序功能是一个好主意。这个问题有点离题,但它可能有助于解释社区的总体方向。

于 2012-02-24T08:13:57.290 回答
1

除了关于调试器未显示整个数组的评论之外,在 Visual Studio debugger for C/C++ 中,您可以添加如下手表:

float_array,30

这将显示数组的 30 个元素。请记住,这不是动态的,它会很高兴地向您显示长度为 != 30 的数组的 30 个元素,因此您必须以其他方式知道数组的长度并根据需要修改手表。如果您想要更“友好”的调试器行为,您可以使用 std::vector。实际上,除非您真的喜欢手动内存管理,否则您可能应该使用 std::vector。

编辑:好的,我注意到评论中的“分配”一词,所以也许你被迫使用手动内存管理:)

于 2012-02-24T08:47:40.467 回答
0

好吧,我在您的代码中看到的唯一问题是您从不存储放入 float_array 中的项目数量,所以我不知道您以后如何确定这一点。

由于指针在 C++ 上的工作方式,大多数调试器在被要求输入 double* 时,只会显示数组的第一项。实际上,调试器无法知道该指针是指向单个项目还是指向数组(如果它是动态创建的数组,它由多少个项目组成)......这就是我所经历的使用 Visual Studio 和 Eclipse CDT 调试器。但是您的数据应该在那里,尝试在您的调试器上输入(或打印到控制台)float_array[1] 或 float_array[2] 中的值。

于 2012-02-24T05:47:46.603 回答