Eri*_*ric -1 c++ string struct
根据您的意见,让我修改原来的问题......
我想创建一个大小为4kb的结构(这个大小是必需的,所以我必须满足它).问题是我无法修改结构中包含的字符串变量的值,因为编译器会抛出分段错误.目前,如果我使用指向字符串而不是字符串变量的指针,我现在知道如何做(感谢你们),但是,我读到了我用来分配4kb内存的方式(malloc)不是最好或最合适的.如果我使用"new"关键字,它会为struct动态分配足够的内存,它可能使用的值不同于4kb,对吧?这就是我不想要的.
我仍然怀疑为什么我不能修改我的struct中包含的字符串变量(不是指针)的值(类似于paginas - > dato ="test").它可能应该是使用malloc的结果
无论如何,我真的很感激你关于如何分配4kb内存的建议.
c ++中的原始代码如下:
#define TAM 4000
#define NUMPAGS 512
struct pagina
{
bitset<12> direccion;
char operacion;
char permiso;
string *dato; //I prefer to have a string variable
int numero;
};
void crearPagina(pagina* pag[], int pos, int dir)
{
pagina * paginas = (pagina*)malloc(sizeof(char) * TAM);
paginas -> direccion = bitset<12> (dir);
paginas -> operacion = 'n';
paginas -> permiso = 'n';
string **tempDato = &paginas -> dato;
char *temp = " ";
**tempDato = temp;
paginas -> numero = 0;
pag[pos] = paginas;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!!!
dato是指向字符串的指针.也就是说,它告诉你在哪里查找字符串,但它实际上并不包含字符串.
因此,如果您希望为其分配字符串,则必须自行分配内存以保存字符串,并将指向该内存的指针提供给结构以便为您保留.
pagina->dato = new string("test");
Run Code Online (Sandbox Code Playgroud)
完成结构后,你需要记住释放字符串的内存,否则你会得到一个"内存泄漏"(因为同样,struct不负责包含字符串的内存,只是为了记住你把它):
delete pagina->dato;
pagina->data = NULL;
Run Code Online (Sandbox Code Playgroud)