数组动态分配 程序在cfree执行不正确

虫洞 2008-12-20 11:56:43
程序中用动态分配数组长度
用c_free4.1执行结果不正确,为
0
0000000000
用vc++6.0就行,为
20
1110010000
想问下是不是c_free的问题,还是代码设置不规范
程序算法没问题,内容不重要,只是当一个例子[code=//回溯法装载问题
#include <iostream>
using namespace std;
#define WEIGHT int

class Loading
{
public:
Loading();
void Backtrack(int i);
void getbestw();
private:
int n;//集装箱数目
int *x;//当前解
int *bestx;//当前最优解
int *w;//集装箱重量数组
WEIGHT c;//第一艘轮船的载重量 现在只考虑了一艘轮船吗?
WEIGHT cw;//当前载重量
WEIGHT bestw;//当前最优载重量
WEIGHT r;//剩余集装箱的重量
};
Loading::Loading()
{
//初始化
int i;
n=10;
x=new int[n];
bestx=new int[n];
w=new int[n];
w[0]=12;w[1]=1;w[2]=2;w[3]=3;w[4]=4;w[5]=5;w[6]=6;w[7]=7;w[8]=8;w[9]=9;
c=20;
cw=0;
bestw=0;
for (i=0;i<n;i++) { x[i]=0; bestx[i]=0; }
r=0;
for (i=0;i<n;i++) r+=w[i];
}

void Loading::Backtrack(int i)
{
if(i>n) //到达叶子节点
{
if(cw > bestw)
{
for(int j=0;j<n;j++)
bestx[j]=x[j];
bestw=cw;
}
return;
}
//搜索左子树
r-=w[i];
if(cw + w[i] <=c)
{
x[i]=1; //x[i]==1,也就是包含某个集装箱的情况
cw += w[i];
Backtrack(i+1);
cw -= w[i];
}
if(cw+r>=bestw)
{
//搜索右子树
x[i]=0; //x[i]==0,也就是不包含某个集装箱的情况
Backtrack(i+1);
}
r+=w[i];
}

void Loading::getbestw()
{
cout<<bestw<<endl; //输出第一艘船尽可能装的重量

for(int i=0;i<n;i++) //输出装进第一艘船的集装箱序列
cout<<bestx[i];
cout<<endl;
}

int main()
{
Loading X;
X.Backtrack(0);
X.getbestw();

}][/code]
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
虫洞 2008-12-24
  • 打赏
  • 举报
回复
发现用命令行编译执行结果也是错误的
我的c++环境变量用的是vc6.0的
为什么
liubuweiright 2008-12-21
  • 打赏
  • 举报
回复
up
虫洞 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jixingzhong 的回复:]
new int[n];
》》delete []
[/Quote]
动态内存分配
c++编译器不是能在自动调用析构函数时,自动delete[]回收吗,难道是c_free没有这样的功能
但这样会影响执行结果吗?
如果要手动回收,应该怎样设置,是分开在各成员函数中设置还是整体在析构函数中设置回收?
PcrazyC 2008-12-21
  • 打赏
  • 举报
回复
调试结果正确,运行就不行...估计是编译器支持的问题,还是不要用这个了
jixingzhong 2008-12-21
  • 打赏
  • 举报
回复
new int[n];
》》delete []
PcrazyC 2008-12-21
  • 打赏
  • 举报
回复
程序输出结果与DELETE无关,要DELETE的话就在析构函数中一起DELETE[].........
fangyuan303687320 2008-12-21
  • 打赏
  • 举报
回复
每个类有构造和析构函数
wiowei 2008-12-21
  • 打赏
  • 举报
回复
要写析构函数delete[]

65,210

社区成员

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

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