char *t = malloc(2);
t = "as";
t = realloc(t,sizeof(char)*6);
Run Code Online (Sandbox Code Playgroud)
我收到错误"无效指针:0x080488d4 * "..
我在使用内存分配函数时遇到了奇怪的错误.是否有任何好的tuts /指南可以解释我的内存分配功能.我正在使用linux ..
请帮忙..
这是你的问题:
char *t = malloc(2);
t = "as";
Run Code Online (Sandbox Code Playgroud)
您可能认为这会将两个字符的字符串复制"as"到刚刚分配的缓冲区中.什么它实际上是扔掉(泄漏)的缓冲,并更改指针,而不是指向字符串常量 "as",它存储在只读存储器旁边的机器代码,而不是在malloc堆上.因为它不在堆上,realloc看着指针并说"不能做,那不是我的".(计算机正在给你这个错误对你很好;当你给realloc不是由返回指针malloc或者realloc,计算机被允许做魔鬼飞出来,如果它要你的鼻子.)
这是你打算做的事情:
char *t = malloc(3);
strcpy(t, "as");
Run Code Online (Sandbox Code Playgroud)
请注意,由于隐式NUL终止符,您需要三个字符的空间,而不是两个字符.
顺便说一句,你永远不需要乘以任何东西sizeof(char); 根据定义,它是1 .