我真的不明白为什么我的代码有这个问题
首先我要创建两个指向char
的指针char* finWord;
char* ignoredWord;
然后我将它们作为参数传递给其他函数
lowerCase(line.substr(0, endWord), ignoredWord);
toNormalWord(ignoredWord, finWord);
但是当我运行该程序时,它会抛出一个Segmentation错误,问题是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++;
}
}
答案 0 :(得分:3)
这一行:
des[sizeof(src) + 1];
什么都不做。但即使它做了某些事情,也不会做你想做的事情。首先,你只是在某个地方引用内存中的单个字节,而不是对它做任何事情。其次,sizeof(src)
不是你传入的字符串的长度......它是std::string
类的大小,它是一个与实际字符串长度无关的常量。
你的意思是创建一个新数组:
des = new char[src.size() + 1];
但这只会泄漏内存,因为des
是一个局部变量。你可能想做的是:
char* toNormalWord(const std::string& src)
{
char* des = new char[src.size() + 1];
// stuff
return des;
}
甚至更好,不要先使用char*
开头:
std::string toNormalWord(const std::string& src)
{
std::string des = src;
// stuff
return des;
}