C++ std::string::assign(std::string const&;)中的分段错误
我有以下代码的问题,我不知道是什么原因造成的。在发布问题之前,我搜索了一下,了解到它可能超出了范围,比如对已释放内存位置的引用,但我自己找不到它。 谢谢你帮助我C++ std::string::assign(std::string const&;)中的分段错误,c++,string,segmentation-fault,assign,C++,String,Segmentation Fault,Assign,我有以下代码的问题,我不知道是什么原因造成的。在发布问题之前,我搜索了一下,了解到它可能超出了范围,比如对已释放内存位置的引用,但我自己找不到它。 谢谢你帮助我 #include<iostream> #include<string> using namespace std; class USR{ private: string name; public: void setName(string name){ this->name
#include<iostream>
#include<string>
using namespace std;
class USR{
private:
string name;
public:
void setName(string name){
this->name = name;
}
string getName(){
return name;
}
};
class A{
private:
USR* * a;
public:
A(int size){
a = new USR*[size];
}
USR* getUser(){
return a[0];
}
};
int main(){
A test = A(5);
USR* u = test.getUser();
(*u).setName("test");
USR* u2 = test.getUser();
cout << (*u2).getName() << endl;
cout << (*u).getName() << endl;
}
#包括
#包括
使用名称空间std;
类USR{
私人:
字符串名;
公众:
无效集合名(字符串名){
此->名称=名称;
}
字符串getName(){
返回名称;
}
};
甲级{
私人:
USR**a;
公众:
A(整数大小){
a=新USR*[尺寸];
}
USR*getUser(){
返回[0];
}
};
int main(){
A试验=A(5);
USR*u=test.getUser();
(*u).设置名称(“测试”);
USR*u2=test.getUser();
cout您的方法getUser
返回一个未初始化的指针(A
的构造函数创建一个未初始化指针数组)。您看到的错误是取消引用该方法返回的未初始化指针的结果。问题是您分配了指针数组,但从未为指针本身分配任何内容
这将为您提供指针数组:
a = new USR*[size];
但您从未为每个指针分配过任何内容
因此,它在这里崩溃了:
(*u).setName("test");
因为*u
未初始化
有两种方法可以解决此问题:
USR
指针分配(并初始化)一些内容USR
对象数组class A{
private:
USR *a;
public:
A(int size){
a = new USR[size];
}
USR* getUser(){
return &a[0];
}
};
不要忘记,您还需要一个析构函数。您只创建了一个新的
USR*
数组,而不是USR
对象数组。在
USR* u = test.getUser();
将给你一个统一的指针。呼叫
(*u).setName("test");
因此,您初始化了一个
USR*
s数组,但还没有初始化单个USR*
对象。正如您声明了一个USR的2D数组,所以我认为您需要用户名数组,尽管我觉得奇怪,为什么您不能简单地使用USR*userArray
无论如何,如果您想让用户名数组工作,那么您需要修改您的类A,如下所示:
class A{
private:
USR* * a;
public:
A(int size){
a = new USR*[size];
int iter = 0;
for(; iter < size; iter++)
{
a[iter] = new USR[size_of_user_names_for_each_user_array];
}
}
USR* getUser(){
return a[0];
}
};
A类{
私人:
USR**a;
公众:
A(整数大小){
a=新USR*[尺寸];
int-iter=0;
对于(;iter
谢谢大家,我接受了比约恩的回答,因为他是第一个回答的人。