如果我重新分配以前分配的内存区域的特定内存块会发生什么?
#include <stdlib.h>
int main(void)
{
char *area = malloc(15 + 1);
strcpy(area, "Stack / Overflow");
realloc(area + 5, strlen(area) + 5);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
area在这个例子中,字符串是否会扩展为5个字节?
Idx: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Chr: S t a c k \0 \0 \0 \0 \0 / O v e r f l o w \0
Run Code Online (Sandbox Code Playgroud) 如果我错了,请纠正我,但符号"C string"指的是指向内存中3个或更多字节的指针,而第3个指针是NULL.
指针在内存中必须至少为4个字节(因为它们表示的地址值类似于整数,最有可能存储在4个字节中).这意味着一个指针可以指向一个没有溢出的偏移地址,而根据数据类型,将引用n个字节.如果是char,则只有要引用的偏移地址.因此,如果我们分配6个字节,int*我们最多可以有2个字符而没有任何流量.
如果上面说的和我改写是正确的.然后:
int* str = calloc(sizeof(int), 2);
Run Code Online (Sandbox Code Playgroud)
是一个最多可包含4个字符的字符串.如果我们想分别处理字节,我们可以使用类型转换.键入类型以忽略警告.除此之外的所有东西,看起来都像一根绳子.我哪里错了?
将:
int foo();
int foo()
{
return foo();
}
Run Code Online (Sandbox Code Playgroud)
永久循环或只运行两次函数(一次隐式,一次一次终止).