- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有静态工厂方法 Foo::createOne 的类 Foo,它创建一个实例并将一些数据放入 std:vector 类型的私有(private)成员变量中。当我调用 Foo::createOne 时,我的程序抛出这个异常:“EXC_BAD_ACCESS(无法访问内存)”
代码如下:
#include <vector>
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
static Foo * createOne();
private:
std::vector<int> v;
};
#include "Foo.h"
Foo::Foo() {
};
Foo::Foo(const Foo& orig) {
};
Foo::~Foo() {
};
Foo * Foo::createOne() {
Foo *f;
f->v.push_back(5);
return f;
}
#include <iostream>
#include "Foo.h"
int main(int argc, char** argv) {
std::cout << "Testing createOne." << std::endl;
Foo *myFoo = Foo::createOne();
std::cout << "It worked." << std::endl;
}
感谢您的回答。我修复了未初始化的指针问题(如下)。现在,我收到编译器警告“返回局部变量‘f’的地址”
Foo * Foo::createOne() {
Foo f;
f.v.push_back(5);
return &f;
}
最佳答案
Foo *f;
f->v.push_back(5);
第一行是创建一个原始的、未初始化的指针。它不是变量的实例,因此尝试取消引用它是 Undefined Behavior .
你需要将它初始化为一个实例,像这样:
Foo *f = new Foo();
f->v.push_back(5);
// ...
delete f;
只有这样你的代码才会生效。
更新:再次检查您的代码后,我现在意识到您完全没有必要使用指针。您可以通过按值返回来做很多相同的事情:
Foo Foo::createOne()
{
Foo f;
f.v.push_back(5);
return f;
}
您收到错误 address of local variable f returned
的原因是您返回了一个指向临时值的指针。局部变量 f
将在函数结束时内存不足,并且设置指向它的指针也将是未定义的行为。
关于c++ - 在 C++ 静态方法中使用时,std::vector pushback 抛出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032626/
看看下面的源代码: import "container/list" type Stream struct { list list.List } func (s Stream) Append(v
我必须创建将一个元素添加到列表末尾的pushBack 方法,但它实现的pushBack 方法不起作用。下面我留下代码: #include #include typedef struct {
我在一台有 16GB RAM 的机器上运行 64 位 Windows 7,但是当我执行以下代码时: #include #include using namespace std; struct Pa
在 list.pushback 文档中说 Due to the nature of a %list this operation can be done in constant time, and d
我有一个 cashier 类,它有 3 个属性:ID、Password、tries,使用标准 GET & 设置方法 //Header file #ifndef CASHIER_H #define CA
在 Java 中制作词法分析器,我使用 PushbackInputStream,因为我需要能够推送我读到的内容,以防它不是我想要的。但每当流为空并且 read() 返回 -1 时。它不允许我使用 un
如何访问 QStringList 的元素在vector类型。 push_back不起作用。 insert ing 也需要另一个 vector仅输入。 #include #include #incl
我编写了以下函数,作为 this algorithm/approach 的实现, 生成给定字符串的幂集(所有子集的集合): vector getAllSubsets(string a, vector
本文整理了Java中org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.pushback()方法的一些代码示例,展示了Zip
我有一个带有静态工厂方法 Foo::createOne 的类 Foo,它创建一个实例并将一些数据放入 std:vector 类型的私有(private)成员变量中。当我调用 Foo::createOn
我是一名优秀的程序员,十分优秀!