gpt4 book ai didi

具有正确地址但具有另一个随机值的 C++ 指针?

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:37 24 4
gpt4 key购买 nike

我在 Qt 上做这件事,但我认为这不重要,因为它只是类(尽管其中一个是线程类)。

无论如何,重点是我的主函数中有一个 Vector,我试图将它传递给另一个类中的指针,但问题是,在那个类中,我得到了随机值。我比较了地址,指针指向的地址和主 vector 的地址,它们是相同的,这意味着共享部分工作正常但由于某种原因我得到了不同的值。谷歌搜索了几个小时后,我意识到因为我的 vector 在堆栈上,所以它会在返回时自动删除,这是合乎逻辑的,这可能是导致这个问题的原因,所以我决定使用“new”来声明我的主 vector 堆:

vector<int> * ids = new vector<int>;

我在另一个类中得到了一个双公共(public)指针

vector<int> ** ids;

我在上面附加了主 vector 的地址。比较地址后,它们是相同的,所以我知道我所做的大部分是正确的,但出于某种原因我仍然得到随机值。

可能是什么问题?我觉得我在某个地方犯了一个愚蠢的错误,但我今天已经厌倦了思考,所以如果你能在这里帮助我就太好了。

编辑:(添加源)

主窗口.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主窗口.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtCore>

#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <vector>
#include <iostream>

using namespace std;

class get_clients : public QThread
{
public:
vector<SOCKET> **clients;
void run() {
cout << (*clients)->size() << endl;
}
};

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

vector<SOCKET> * clients = new vector<SOCKET>();

get_clients * get_clients1 = new get_clients();
get_clients1->clients = &clients;
get_clients1->start();
}

MainWindow::~MainWindow()
{
delete ui;
}

主要.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

最佳答案

你肯定做错了什么。发布更多代码。在遍历列表之前,您需要确保您的指针指向您的列表。这是您正在尝试做的事情的一个例子,它完美地工作:

int main()
{
std::vector<int>* myList = new std::vector<int>();


std::vector<int>** myListPtr = &myList;

(*myListPtr)->push_back(12);
myList->push_back(13);

for (auto& itm : *myList)
{
std::cout << itm << " address of item: " << &itm << std::endl;
}

for (auto& itm : **myListPtr)
{
std::cout << itm << " address of item: " << &itm << std::endl;
}

delete myList;
myListPtr = nullptr;

std::cin.get();
return 0;
}

关于具有正确地址但具有另一个随机值的 C++ 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com