【发布时间】:2018-10-01 06:59:20
【问题描述】:
错误访问意味着我正在尝试访问不存在的内存我已经尝试并尝试为此类分配内存,但到处都失败了。我不知道错误实际来自哪里。它只告诉我我的 setter 方法是程序崩溃的时候。在 setFName() 方法中是发生错误的地方。但在主要方法中它实际发生的地方。 护士.hpp
#ifndef Nurse_hpp
#define Nurse_hpp
#include <stdio.h>
#include <string>
#include <stdlib.h>
using namespace std;
class nurse{
private:
string firstName;
public:
nurse() {
firstName = "jim";
}
string getFName() {return firstName;}
void setFName(string fName) {firstName = fName;} // Thread 1: bad access 0x0
};
#endif /* Nurse_hpp */
这里是实际发生错误的地方 main.cpp
#include <cstdint> // ::std::uint64_t type
#include <cstddef> // ::std::size_t type
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include "nurseHolder.hpp"
using namespace std;
nurseHolder *l = new nurseHolder();
int main() {
return 0;
}
最后是导致问题的类 护士持有人.hpp
#ifndef Nurses_hpp
#define Nurses_hpp
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include "Nurse.cpp"
using namespace std;
class nurseHolder{
private:
int nurse_cnt;
int nurse_cap;
vector<nurse> nurse_list;
public:
nurseHolder() {
nurse_cnt = 0;
nurse_cap = 10;
for(int i= 0; i < 11; i++){
nurse_list[i].setFName("na");
}
}
vector<nurse> &getNurseList() { return nurse_list;}
};
#endif /* Nurses_hpp */
如果代码太多,我尽量使这个紧凑。
这是我为使代码正常工作所做的更改:
nurseHolder() {
nurse_cnt = 0;
nurse_cap = 10;
for(int i= 0; i < 11; i++){
nurse l;
nurse_list.pushback(l);
}
}
这是正确的做法吗?
【问题讨论】:
-
您的向量
nurse_list的大小为 0。 -
如何添加尺寸? @tkausl
-
您使用其
push_back方法添加到向量中。当您使用数组访问语法时,例如在nurse_list[i]中,您正在访问一个据说已经存在的元素。 -
@DevinTripp 使用适当的constructor、
resize或push_back -
vector.push_back(element)向vector添加元素,目前为空
标签: c++ memory memory-leaks