分配字符串数组时出现分段错误
Segmentation Fault on Assigning string Array
几天来,我一直试图为一个函数返回一个字符串数组,但没有成功。当我在StackOverflow周围搜索时,我发现最好有一个参数来分配数组的值。因此,这里是我的代码示例(不是实际用法,而是我如何尝试使用该函数的模型)。如果代码有点草率,我很抱歉。我已经用它测试了一段时间。
void splitOn(string message, string delim, string***toCh) {
string** rString = new string*;
string lArr[numberOf(message, delim)+1];
for(int index=0; index<numberOf(message, delim)+2; index++) {
lArr[index]=message.substr(0, message.find(delim)).c_str();
message = message.substr(message.find(delim)+1, message.length());
rString[index]=&lArr[index];
cout << "IN LOOP "<<*rString[index]<<endl;
}
rString[numberOf(message, string(delim))] = &message;
toCh=&rString;
}
int main(){
string***arr;
splitOn("fox.over.lazy.dog", ".", arr);
cout << **arr[0]<<endl;
注:
numberOf()获取一个字符串和一个分隔符(string),并返回在字符串中找到分隔符的次数。
字符串来自std::string
lArr(循环中的本地数组)和*rString都给出了正确的输出。
虽然我正在尝试将数组分配给一个参数,但学习如何返回数组对我来说更具吸引力
我可以用一个文件和getLine()把它破解在一起,但我更愿意学习如何正确地做到这一点。
您试图返回局部变量,但这永远不会奏效。您和您的调用者需要就如何分配返回值达成一致。在C++中,正如评论者所提到的,这通常是通过传递对向量的引用来为您处理分配来完成的。
在C中,你有两个选项,你可以让调用者传递足够大的分配,或者在被调用者中使用多个malloc调用(不要忘记在调用者中释放调用!)
例如,如果传递一个可写字符数组,您可以简单地用null字符覆盖分隔符,将其拆分为单独的字符串,而不必分配新的副本。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?