我真的不明白为什么我的代码有这个问题
首先,我创建了两个指向 char 的指针
char* finWord;
char* ignoredWord;
Run Code Online (Sandbox Code Playgroud)
然后我将它们作为参数传递给其他函数
lowerCase(line.substr(0, endWord), ignoredWord);
toNormalWord(ignoredWord, finWord);
Run Code Online (Sandbox Code Playgroud)
但是当我运行程序时,它抛出了一个分段错误,问题是 finWord 地址总是 0x1
这里是问题发生的地方
void toNormalWord (string src, char* des)
{
char c;
des[sizeof(src) + 1];
int position = 0;
if (isThere)
{
des[position] = c; //Here the gdb show me the following error 0x1 <error:
// Cannot access memory at address 0x1>
position++;
}
}
Run Code Online (Sandbox Code Playgroud)
这一行:
des[sizeof(src) + 1];
Run Code Online (Sandbox Code Playgroud)
什么也没做。但即使它做了一些事情,它也不会做你想让它做的事情。首先,您只是在某处引用内存中的单个字节,而不对其进行任何操作。其次,sizeof(src)不是你传入的字符串的长度......它是std::string类的大小,它是一个独立于实际字符串长度的常量。
您的意思实际上是创建一个新数组:
des = new char[src.size() + 1];
Run Code Online (Sandbox Code Playgroud)
但这只会泄漏内存,因为它des是一个局部变量。你可能想要做的是:
char* toNormalWord(const std::string& src)
{
char* des = new char[src.size() + 1];
// stuff
return des;
}
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,不用于char*开头:
std::string toNormalWord(const std::string& src)
{
std::string des = src;
// stuff
return des;
}
Run Code Online (Sandbox Code Playgroud)