请教下关于 二维动态数组 返回指针的问题。

wymesmile 2011-01-05 10:05:11
大家帮我看看 这个例子吧,错在哪里啦??我找了半天也没找出错在哪~ 先谢谢各位了~

我调试了一下,好像是P_dtw地址指向不正确,是不是函数传回地址的时候不正确?但是我觉得代码应该对吧,是不是我这块搞错了,但是自己没有发觉?

错误信息是这个:First-chance exception in dtw.exe: 0xC0000005: Access Violation.

代码如下:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2);
int main()
{
vector<float> seq1;
float seq_1;
vector<float> seq2;
float seq_2;
cout<<"请输入seq1:";
while(cin>>seq_1)
{
seq1.push_back(seq_1);
}
cout<<endl<<endl;
cin.clear();
cout<<"请输入seq2:";
while(cin>>seq_2)
{
seq2.push_back(seq_2);
}
cout<<endl<<endl;
vector<vector<float> > *p_dtw=dtw(seq1,seq2);
cout<<(*p_dtw)[2][1]<<endl;

delete p_dtw;
return 0;

}


vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{

vector<vector<float> > *dtwmatrix=new vector<vector<float> >;
for(int i=0;i<seq1.size();i++)
{
for(int j=0;j<seq2.size();j++)
{
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
}
}

return dtwmatrix;
}
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wymesmile 2011-01-10
  • 打赏
  • 举报
回复
谢谢各位啦,已经解决了, 只要是把
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
换成了
(*dtwmatrix).push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
就可以了,但是还没搞懂,为啥~~
liuhex 2011-01-06
  • 打赏
  • 举报
回复
vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{

vector<vector<float> > *dtwmatrix=new vector<vector<float> >;
for(int i=0;i<seq1.size();i++)
{
for(int j=0;j<seq2.size();j++)
{
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
}
}

return dtwmatrix;
}
这个函数有问题。
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
你这里把*dtwmatrix当成了一个还有多个元素的vextor,其实他里面还没有元素。这是你使用(*dtwmatrix)[i]肯定是错的,所以在使用这句话之前要向里面加入元素(vector<float>类型),之后才能调用这句话。
修正如下:
vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{

vector<vector<float> > *dtwmatrix=new vector<vector<float> >;
vector<float> vf;
cout<<dtwmatrix->size()<<endl;
for(int i=0;i<seq1.size();i++)
{
dtwmatrix->push_back(vf);
for(int j=0;j<seq2.size();j++)
{
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
}
}

return dtwmatrix;
}
还有你在main()函数里面打印
cout<<(*p_dtw)[2][1]<<endl;
一定要注意vector的维数。

苍蝇①号 2011-01-05
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2);
int main()
{
vector<float> seq1;
float seq_1;
vector<float> seq2;
float seq_2;
cout<<"请输入seq1:";
while(cin>>seq_1)
{
seq1.push_back(seq_1);
}
cout<<endl<<endl;
cin.clear();
cout<<"请输入seq2:";
while(cin>>seq_2)
{
seq2.push_back(seq_2);
}
cout<<endl<<endl;
vector<vector<float> > *p_dtw=dtw(seq1,seq2);
cout<<(*p_dtw)[2][1]<<endl;

delete p_dtw;
return 0;

}


vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{

vector<vector<float> > *dtwmatrix=new vector<vector<float> >;
for(int i=0;i<seq1.size();i++)
{
vector<float> v;
for(int j=0;j<seq2.size();j++)
{
v.push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
}
dtwmatrix->push_back(v);
}

return dtwmatrix;
}
bdmh 2011-01-05
  • 打赏
  • 举报
回复

vector< vector<float> >* dtw(vector<float> seq1,vector<float> seq2);
int main()
{
vector<float> seq1;
float seq_1;
vector<float> seq2;
float seq_2;
cout<<"请输入seq1:";
while(cin>>seq_1)
{
seq1.push_back(seq_1);
}
cout<<endl<<endl;
cin.clear();
cout<<"请输入seq2:";
while(cin>>seq_2)
{
seq2.push_back(seq_2);
}
cout<<endl<<endl;
vector<vector<float> > *p_dtw=dtw(seq1,seq2);
cout<<(*p_dtw)[0][0]<<endl;

delete p_dtw;
return 0;

}


vector< vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{
vector< vector<float> > *dtwmatrix=new vector< vector<float> >;
for(int i=0;i<seq1.size();i++)
{
for(int j=0;j<seq2.size();j++)
{
vector<float> v;
v.push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
(*dtwmatrix).push_back(v);
}
}

return dtwmatrix;
}
ryfdizuo 2011-01-05
  • 打赏
  • 举报
回复
vector<vector<float> >* dtw(vector<float> seq1,vector<float> seq2)
{
typedef vector<vector<float> > container_type;

container_type* dtwmatrix = new container_type( seq1.size(), vector<float>(seq2.size()) );
//vector<<vector<int> > array(N, vector<int>(M)) N行M列

for(int i=0;i<seq1.size();i++)
{
for(int j=0;j<seq2.size();j++)
{
(*dtwmatrix)[i].push_back((i-j)*(i-j)+(seq1[i]-seq2[j])*(seq1[i]-seq2[j]));
}
}

return dtwmatrix;
}

试试看,

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧