注册 登录
编程论坛 C++教室

软件被系统警告,求高手指点!!!!

大虚无 发布于 2013-09-26 13:03, 589 次点击
今天我本想做一款恶搞软件,软件成功生成,但运行时却被系统警告,并且编译器显示程序触发断点。
这是代码:
#include <iostream>
using namespace std;
class w{
int we;
public:
int address(){
we=1;int *q;
while(we<=10){cout<<q<<endl;q++;we++;}return 0;}};
int main(){
cout<<"1 world address of all"<<endl<<"2 address of fight"<<endl<<"3 address of all human"<<endl<<"4 exit"<<endl;
int i=1;while(i>=0){
int a;cin>>a;
if(a==1) {w b;b.address();}
if(a==2) {w b;b.address();}
if(a==3) {w b;b.address();}
if(a==4) break;}
return 0;}
求助!!!!
8 回复
#2
3037709572013-09-26 13:18
class w
{
    int we;
public:
    int address()
    {
        we=1;
       int *q;
        while(we<=10)
        {
            cout<<q<<endl;//q都没有赋初值就在这里用着呢,看得的只想抽你,不赋初值输出的是一段内存地址。
            q++;
//很容易引起内存泄露
            we++;
        }
        return 0;
    }
};
#3
大虚无2013-09-26 13:30
回复 2楼 303770957
本来就是一款恶搞程序,就是想随机输出10个地址,这个并不是问题,将int*q;扔进private中,编译运行就没任何问题,也没警告,将这句话扔进函数中就出警告了,而且,不是说数据生命只是函数这一端里吗,函数结束他就被吊销了吗?函数从新调用时,数据会被重新定义吗?,为啥我不管系统警告强行执行后,无论我输入什么,q指向的地址都没变过,好像q一直活着一样,大神知道怎么回事吗?
#4
西安郑鑫2013-09-26 16:28
LZ以后贴代码也把缩进贴上啊,看得我也想抽你。我虽然不是高手,也给你提个小建议哈,成员函数的实现最好放到类外面。
#5
西安郑鑫2013-09-26 16:48
程序代码:
#include<iostream>
using namespace std;
class Test
{
public:
    show();
};
//成员函数实现
Test::show()
{
    int i = 0;
    int *p;
    for(i=0; i<5; ++i)
    {
        cout << p << endl;
    }
}

int main()
{
    Test haha;
    haha.show();
    return 0;
}

输出的5次结果都是同一个地址
只有本站会员才能查看附件,请 登录

我想了想,你说的是变量的生命周期在函数中吧,这个是指针,指针本身占内存,在整个程序中不会自动改变值得吧。
#6
3037709572013-09-26 16:57
回复 5楼 西安郑鑫
你没有移动指针当然是一样的了,楼主的程序进行了指针的移动操作了。
#7
大虚无2013-09-26 17:41
回复 6楼 303770957
那楼上的各位,请问如何做到每次输出的地址是随机的?
#8
3037709572013-09-26 20:21
那你产生个随机整数让指针按照这个整数随机移动。
#9
大虚无2013-09-26 22:19
回复 8楼 303770957
如何产生随机整数?能否用实际代码指点一下?
1