为什么这段代码不起作用?它会在没有编译器错误或警告的情况下抛出运行时错误。
int main(void) {
char *korisnik = new char[20];
korisnik = "Bizuterija";
*(korisnik+1) = 'h'; // error here!
cout << korisnik << endl;
delete[] korisnik;
return 0;
}
答案 0 :(得分:16)
korisnik = "Bizuterija";
此行替换存储在korisnik
中并由new
分配的地址,其中包含您无法修改的可执行文件的数据段中的地址,因为它是字符串文字。你实际上在这里创建了一个内存泄漏。
尝试将字符串的内容复制到指向的内存:
strncpy(korisnik, "Bizuterija", 20);
顺便说一句,既然您使用C ++,那么一定要使用std::string
。
答案 1 :(得分:6)
我建议切换到std :: string,因为你使用的是c ++。
#include <string>
#include <iostream>
int main(int argc, char** argv) {
std::string korisnik = "Bizuterija";
korisnik[1] = 'h';
std::cout <<korisnik <<std::endl;
return 0;
}