将双变量分配给动态双数组
Assigning double variables to dynamic double array
我试图在循环中为双数组分配不同的变量值,但整个数组只有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++上的工作方式,大多数调试器在被要求使用双*时,只会显示数组的第一项。实际上,调试器无法知道该指针是指向单个项还是指向数组(如果它是一个通常创建的数组,它由多少项组成)。。。这就是我在使用VisualStudio和EclipseCDT调试器时所经历的。但数据应该在那里,请尝试在调试器上输入(或打印到控制台)float_array[1]或float_aarray[2]中的值。
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错