为什么此代码不起作用?它会引发运行时错误,而不会出现编译器错误或警告。

 int main(void) {

    char *korisnik = new char[20];
    korisnik = "Bizuterija";
    *(korisnik+1) = 'h'; // error here!
    cout << korisnik << endl;

    delete[] korisnik;


    return 0;
}

最佳答案

korisnik = "Bizuterija";

此行用您无法修改的可执行文件的数据段中的地址替换存储在korisnik中并由new分配的地址,因为它是字符串文字。您实际上在这里造成了内存泄漏。

尝试将字符串的内容复制到指向的内存中:
strncpy(korisnik, "Bizuterija", 20);

顺便说一句,由于您使用的是C++,因此一定要使用std::string

08-06 14:13