c ++ <error:can not =“”access =“”memory =“”at =“”address =“”0x1 =“”> </error:>

时间:2014-12-31 21:59:43

标签: c++

我真的不明白为什么我的代码有这个问题

首先我要创建两个指向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++;
    }
}

1 个答案:

答案 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;
}