You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++中Point *newpoint = newpoint;代码的作用及写法疑问

问题解答与分析

一、Point *newpoint = newpoint;的本质:完全错误的代码

这段代码是未定义行为,没有任何合理作用,属于明显的错误写法:

  • 局部指针变量newpoint在声明时还未完成初始化,此时它的值是栈上的随机垃圾数据。
  • 用这个未初始化的垃圾值给自己赋值,最终newpoint会指向一个完全未知的内存地址。
  • 后续执行newpoint->x = value和(*newpoint).x时,相当于直接操作非法内存,会导致程序崩溃、数据损坏或其他不可预测的结果。

二、你提到的替代写法的分析与注意事项

你给出的写法:

Point newpoint1;
Point *newpoint = &newpoint1;

是语法合法的,但存在生命周期的隐患:

  • newpoint1是局部对象,存储在栈上,当insert函数执行完毕后,这个对象会被自动销毁。
  • 如果后续还需要使用指针newpoint,它就会变成野指针(指向已释放的内存),再次访问同样会触发未定义行为。

三、正确的写法建议

如果需要在函数内创建一个Point对象并通过指针操作,分两种场景选择:

  1. 仅在函数内部使用对象:直接用局部对象即可,无需指针
void insert(int value){
    Point newpoint1;
    newpoint1.x = value;
    cout << "newpoint val: " << newpoint1.x << endl;
}
  1. 需要对象在函数结束后仍然存在:使用动态内存分配(记得后续要释放内存,避免内存泄漏)
void insert(int value){
    Point *newpoint = new Point; // 在堆上分配内存
    newpoint->x = value;
    cout << "newpoint val: " << newpoint->x << endl;
    // 注意:后续需要在合适的地方调用 delete newpoint; 释放内存
}

内容的提问来源于stack exchange,提问作者YOUNG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:22:38