我试图从函数中获取2个指针并将其打印在main中。模糊的东西是一个指针似乎已经恢复了它的价值,而另一个则没有。两个指针在调用函数内部都有正确的值,就在返回之前。请告诉我您是否可以识别任何妨碍我得到正确答案的程序性错误。
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
double* readctrls()
{
fstream inputs;
inputs.open("input_coods.txt");
int nol = 0,i = 0;
string line,temp,subtemptrans,subtemprots;
while(getline(inputs,line))
{
++nol;
}
// cout<<nol<<endl;
inputs.close();
inputs.open("input_coods.txt");
string *lines = new (nothrow) string[nol];
double* trans = new double[nol];
double* rots = new double[nol];
trans[0] =float(nol);
for(int i = 0; i<nol ; i++)
{
getline(inputs,lines[i]);
// cout<<lines[i]<<endl;
temp = lines[i];
// cout<<temp<<endl;
for(int j = 0; j<temp.length() ; j++)
{
if(temp.at(j) == ' ')
{
subtemptrans = temp.substr(0,j);
subtemprots = temp.substr(j+1,temp.length()-j);
// cout<<subtemprots<<endl;
*(trans+i+1) = ::atof(subtemptrans.c_str());
*(rots+i) = float(atoi(subtemprots.c_str()));
// cout<<rots[i]<<endl;
}
}
}
inputs.close();
// cout<<rots[2]<<endl;
return(rots,trans);
}
int main()
{
double *trans,*rots;
(rots,trans) = readctrls();
// cout<<sizeof(trans)<<endl;
for(int i=0;i<trans[0];i++)
{
cout<<*(trans+i)<<endl;
cout<<*(rots+i)<<endl;
}
}
Trans的值在内存中写得很好,并且完全保留在main()中。但腐烂正在给出订单的垃圾值(e ^ -42)。请帮帮我。
答案 0 :(得分:3)
C ++既不是Python也不是Lua。
您无法从函数返回多个值。
return rots, trans;
这是逗号运算符 - 计算其操作数并产生最后一个(最右边的)操作数。
(rots, trans) = readctrls();
同样,这仅指定给trans
,rots
将被取消初始化。
解决方案:您既可以返回包含两个指针的结构,也可以通过引用传递它们,或者其他...
struct Foo {
double *rots;
double *trans;
};
Foo readctrls()
{
// ...
Foo r;
r.rots = rots;
r.trans = trans;
return r;
}
或:
void readctrls(double *&r, double *&t)
{
// ...
r = rots;
t = trans;
}
其他评论:
不要使用原始数组。 {C}内std::vector<T>
通常优先于T *
。
超级浪费读取整个文件只是为了计算行数,然后再次读取它以实际解析其内容。如果你使用了std::vector<double>
,那么你可以只是vector.push_back(some_double);
,所以你不必两次浏览文件(你知道,I / O很贵,特别是如果文件很大)。
您永远不会delete
使用new
分配的指针 - 此处您的程序会泄漏内存。