qq_44251971 2023-03-15 13:29 采纳率: 25%
浏览 25
已结题

C++指针数组以及地址的问题

访问new创建的数组为什么总是出现错误,不太理解,int *new_p = p;这一行不就是地址的复制吗?没必要写感觉是一样的啊?为什么在for循环内能够输出正确的值,换到循环外用for循环就访问的值是错误的?

第一次 int *new_p = p;复制的值,和 *new_p = *iter;语句运行之后的地址会有不同,这是为什么?不是用 * 将new_p解引用然后同样的道理讲iter对应的值放入new_p的地址内吗?
求各位解答一二,初学指针。


#include<iostream>
//编写程序由从标准输入设备读取的元素数据建立一个int型的vector对象,
//然后创建一个与该vector对象大小一致的数组,把vector对象的虽有元素赋值给新数组
#include<vector>
using namespace std;

int main(){
    vector<int> container;
    int value;//数组需要一开始就确定长度,哪怕元素都为零
    string result;
    cout << "ctrl +z 放于行首代表输入完成(终止)" << endl;
    while(cin >> value){
    //输入的值放入缓冲区,一次读取一个数据,第二次循环直接读取第一次输入尚未放入容器的值
    container.push_back(value);
    }
    int *p = new int[container.size()];//动态建立一个数组,*p指向数组首个元素
    int *new_p = p;
    int i = 0;
    cout << "container容量为:" << container.size() << endl;
    for (vector<int>::iterator iter=container.begin(); iter != container.end(); ++iter,++new_p) {
        
        if (i < container.size())
        {
            *new_p = *iter;
            i++;
            cout << *new_p<< endl;
        }
        //cout << p << endl;
    }


    for (int j = 0; j < container.size(); j++) {
        cout << new_p[j] <<" ";
    }
    cout << endl;
    delete [] p;
    system("pause");
    return 0;
}

img


尝试过在 27行if循环后用 cout << new_p[i]<< endl;去验证,发现

img

  • 写回答

4条回答 默认 最新

  • 元气少女缘结神 2023-03-15 14:01
    关注

    将32行改放到36行下。
    不然那块内存都已经释放掉了,你去访问不就无意义了么。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 修改了问题 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测