连续指针分配;重新分配还是分配? 如果将内存分配给循环中的指针,编译器会将其视为单个实例吗?具体地说: for (i = 0; i < SOME_VAL; i++) { char *p = NULL; p = malloc(sizeof(char)); SEND_POINTER_ON_NETWORK(p); } (i=0;i

连续指针分配;重新分配还是分配? 如果将内存分配给循环中的指针,编译器会将其视为单个实例吗?具体地说: for (i = 0; i < SOME_VAL; i++) { char *p = NULL; p = malloc(sizeof(char)); SEND_POINTER_ON_NETWORK(p); } (i=0;i,c,memory,C,Memory,编译器会在每次执行时创建一个新的p实例,还是会继续为p分配内存?我正在使用VS2010 char *p = NULL; p = malloc(sizeof(char)); 循环中对malloc()的每次调用都会将新的内存位置分配给指针p,如果您试图将已分配的内存扩展到p,则使用realloc()内存管理系统将在malloc中的参数大小(在本例中为sizeof(char))下查找可用内存插槽。您不会从一个迭代到下一个迭代释放内存。因此,内存管理系统“看到”内存已被占用,并为指针p分配一个新的内存

编译器会在每次执行时创建一个新的
p
实例,还是会继续为
p
分配内存?我正在使用VS2010

char *p = NULL;
p = malloc(sizeof(char));

循环中对malloc()的每次调用都会将新的内存位置分配给指针
p
,如果您试图将已分配的内存扩展到
p
,则使用
realloc()

内存管理系统将在malloc中的参数大小(在本例中为sizeof(char))下查找可用内存插槽。您不会从一个迭代到下一个迭代释放内存。因此,内存管理系统“看到”内存已被占用,并为指针p分配一个新的内存插槽。 代码中存在内存泄漏。

来自ISO/IEC 9899:

(称为c99标准)

7.20.3.3
malloc
功能

概要

1
#包括

void*malloc(大小)

描述

2 malloc函数为大小由
size
指定的对象分配空间,并且 其值是不确定的

返回

3 malloc函数返回空指针或指向分配空间的指针

您期望的行为将由realloc执行,其描述如下:

7.20.3.4
realloc
功能

概要

1
#包括

void*realloc(void*ptr,size\u t size)

描述

2 realloc函数解除分配由
ptr
指向的旧对象,并返回 指向新对象的指针,该对象的大小由
size
指定。新报告的内容 对象应与解除分配前的旧对象相同,以较小者为准 新的和旧的尺寸。新对象中超出旧对象大小的任何字节都将被删除 不确定值

3如果
ptr
是空指针,则
realloc
函数的行为与 指定的大小。否则,如果
ptr
与 calloc、malloc或realloc函数,或者如果空间已通过调用释放 对于
free
realloc
函数,行为未定义。如果内存为新的 无法分配对象,旧对象未解除分配且其值不变

返回

4
realloc
函数返回指向新对象的指针(该对象可能具有相同的 值作为指向旧对象的指针),或者如果无法创建新对象,则为空指针 分配的

同样值得注意的是,MSVC编译器并非在所有主题中都严格遵守标准

但在这两个案例中,我知道它们都符合这一点。所以它对你的问题也是有效的