【发布时间】:2015-08-13 20:38:39
【问题描述】:
使用 C 我想分配最大初始字符串长度的堆空间,在我的情况下为 6,然后 每次字符串即将溢出时,将可用空间加倍。 我想按字符构建字符串。
size_t nstring = 6;
char *arr = malloc(nstring);
int i;
for (i = 0; i < 55;i++){
if (i == nstring) {
printf("mAx sized!!");
arr = realloc(arr, nstring*2);
nstring = nstring*2;
}
arr[i] = 'f';
}
arr[i] = '\0';
printf("length %lu\n", strlen(arr));
free(arr);
【问题讨论】:
-
问题是......?
-
此代码不起作用它说下一个尺寸无效
-
您一直在使用未初始化的内存。你没有 NULL 终止符,你的 strlen 坏了,你正在重新分配没有边界
-
从 16 而不是 6 开始。内存管理器(在大多数系统上)无论如何都会四舍五入到 16 的倍数。
-
@GarrGodfrey - 不,在循环之前,以及在每个
arr[i] = 'f';之后,如果只有一个数组项被初始化,因为这会超过之前的 NULL。否则,strlen 不会返回“正确”的结果。
标签: c string pointers malloc overflow