标题:指向数组的指针,表示的元素在运行时会混乱的变化?
只看楼主
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
 问题点数:0 回复次数:2 
指向数组的指针,表示的元素在运行时会混乱的变化?
类声明部分:
class InsertSort
{
    private:
        int *p;
    public:
        void Fun();
        InsertSort();
        ~InsertSort();
};

类定义部分
#include<iostream>
using namespace std;
#include"insertSort.h"

void InsertSort::Fun()
{
    int i,j,t,temp;
    int len=7;
   
    for(i=1;i<=len-1;i++)
    {
        for(j=0;j<=i-1;j++)  //调试的时候一到这句,p[6]就变成了6,不是1。搞不清楚为什么会莫名奇妙的变化?
        {
            if(p[i]<p[j])
            {
                temp=p[i];
                t=j;
                while(i>=t+1)  
                {
                    p[i]=p[i-1];
                    i--;
                }
                p[j]=temp;
            }
        }
    }
   
    for(i=0;i<=6;i++)
        cout<<p[i]<<" "<<endl;
}

InsertSort::InsertSort()
{
    int a[7]={5,6,3,9,2,7,1};
    p=a;
}

InsertSort::~InsertSort()
{
//    delete[]p;                  //如果这里释放p指针变量,却会出现错误,这是为什么?是因为本来就没有动态开辟一个数组给p,这里的p=a仅仅是把a数组的首地址传给了p?
    cout<<"析构函数运行了"<<endl;
}

主函数:insertSort.cpp
#include<iostream>
using namespace std;
#include"insertSort.h"

int main()
{
    InsertSort obj;
    obj.Fun();
    return 0;
}













搜索更多相关主题的帖子: 数组 指针 运行 int include 
2018-04-13 22:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
前面太多不看

InsertSort::InsertSort()
{
    int a[7]={5,6,3,9,2,7,1};
    p=a;
}
肯定是错的,因为a是局部临时变量,出了这个函数它就不存在了
2018-04-13 23:26
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
得分:0 
回复 2楼 rjsp
小生基础较差,多谢版主点拨
2018-04-14 09:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486055-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039713 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved