[英]Assigning double variables to dynamic double array
我试图将不同的变量值分配给循环中的double数组,但是整个数组只有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;
}
我在测试变量中获得了完美的转换。 我在s1
也获得了“ 2.1”,但在调试器中,我在float_array中仅获得了一个值为5.0999945的值。 没有其他索引具有任何其他值。 测试变量值正确转换后,我在动态数组中看到问题。
请问有解决办法吗?
该代码已经有效 。 C和C ++是一种低级语言,在某种程度上倾向于向调试器隐藏信息,但是该信息仍然使用std::cout <<
。
将其与依赖于优化的错误(可能使调试器几乎毫无用处)的可能性相结合,最好在没有特殊工具的情况下验证程序的功能。 这个问题有点偏离主题,但这可能有助于解释社区的总体方向。
除了关于调试器未显示整个阵列的注释之外,在Visual Studio C / C ++调试器中,您可以添加如下手表:
float_array,30
这将显示数组的30个元素。 请记住,这不是动态的,它会愉快地向您显示长度为!= 30的数组的30个元素,因此您必须以其他方式知道数组的长度并根据需要修改手表。 如果您想要更“友好”的调试器行为,则可以使用std :: vector。 实际上,除非您真正喜欢手动内存管理,否则您可能仍应使用std :: vector。
编辑:好的,我注意到注释中的“赋值”一词,因此也许您被迫使用手动内存管理:)
好吧,我在代码上看到的唯一问题是,您永远不会存储放入float_array中的项目数量,因此我看不到以后如何确定。
由于指针在C ++上的工作方式,大多数调试器在要求使用double *时,只会显示数组的第一项。 实际上,调试器没有办法知道该指针是指向单个项目还是指向数组(如果它是一个动态创建的数组,则它包含多少个项目)...这就是我所经历的使用Visual Studio和Eclipse CDT调试器。 但是您的数据应该在那里,请尝试在调试器上输入(或打印到控制台)float_array [1]或float_array [2]中的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.