首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中将一个指针复制到另一个指针

在C++中将一个指针复制到另一个指针
EN

Stack Overflow用户
提问于 2012-07-28 01:07:55
回答 4查看 23.2K关注 0票数 8
代码语言:javascript
运行
复制
#include <iostream>

using namespace std;

int main(int argc, char **argv) {
    int a=5;
    int *p,*q;

    *p = a;
    *q = *p;  //line 6

    cout<<*p<<p<<*q<<q;

    return 0;
}

此程序挂起。似乎问题出在6号线上。为什么?

EN

回答 4

Stack Overflow用户

发布于 2012-07-28 01:09:00

是的,这些是悬空的指针,你会遇到未定义的行为。

不能取消引用指向不属于自己的内存的指针:

代码语言:javascript
运行
复制
int* p;
*p; //illegal

int* x = NULL;
*x; //illegal

int* y = new int;
*y; //OK!

正确的版本应该是:

代码语言:javascript
运行
复制
int main(int argc, char **argv) {
    int a=5;
    int *p = new int; 
    int *q = new int;

    *p = a;
    *q = *p;  //line 6

    cout<<*p<<p<<*q<<q;

    delete p; 
    delete q;

    return 0;
}

代码语言:javascript
运行
复制
int main(int argc, char **argv) {
    int a=5;
    int *p;
    int *q;

    p = &a;
    q = p;  //line 6

    cout<<*p<<p<<*q<<q;

    return 0;
}

一个更正确的版本:

代码语言:javascript
运行
复制
int main(int argc, char **argv) {
    int a=5;
    int p,q;

    p = a;
    q = p;  //line 6

    cout<<p<<p<<q<<q;

    return 0;
}

无指针:)

票数 8
EN

Stack Overflow用户

发布于 2012-07-28 01:11:53

在第5行也有一个问题。你已经声明了指针,但是你没有让它们指向任何东西,这不会自动发生。而取消引用一个未初始化的指针,就像你所做的那样,很容易使你的程序崩溃。

像这样的东西会更好。

代码语言:javascript
运行
复制
int main(int argc, char **argv) {
    int a=5;
    int b, c;
    int *p,*q;

    p = &b; // make p point at b
    q = &c; // make q point at c
    *p = a;
    *q = *p;  //line 6

    cout<<*p<<p<<*q<<q;

    return 0;
}
票数 5
EN

Stack Overflow用户

发布于 2012-07-28 01:12:36

你所拥有的代码假设有一些东西存储在p上,而实际上并没有。

这就是你想要做的吗?

代码语言:javascript
运行
复制
int a=5;
int *p,*q;

p = &a;
q = p;  //line 6

cout<<(*p)<<p<<(*q)<<q;

在上面的代码中,在程序的末尾,p和q指向相同的地址-存储整数a的地址

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11692438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档