gpt4 book ai didi

c - 编辑原始数组的元素、Valgrind 和功能错误

转载 作者:行者123 更新时间:2023-11-30 17:49:10 25 4
gpt4 key购买 nike

因此,在我的程序中,我尝试编辑原始数组“frags”的元素,该数组最初已分配存储在某些插槽中的字符串。但我不太确定怎么做。在程序的过程中,我需要重新分配原始数组中的元素,以便它们可以存储更大长度的字符串,但我的方法似乎会导致 valgrind + 功能错误。 Valgrind说错误来自realloc,功能错误是输出不正确。

int main(void) {
char *frag[3];
char *frag1 = malloc(4), *frag2 = malloc(5);
strcpy(frag1, "him");
strcpy(frag2, "hers");
frag[0] = frag1;
frag[1] = frag2;
char *k = frag[0];
char *l = frag[1];
k = realloc(k, 500);
strcat(k, l);
printf("%s\n ", frag[0]);
printf("%s\n ", frag[1]);
free(k);
free(l);
return 0;
}

当您将 malloc 和 realloc 分配给不同的变量时,我并不是 100% 清楚它们是如何工作的。如果你这样做

char *k = malloc(5); 
char *l = k;
l = realloc(l, 100);

您是否正在重新分配 k 仍然指向的内存?释放和重新分配指针“l”的变化会影响指针“k”的内容吗?抱歉,我是 C 语言新手。

最佳答案

Are you reallocating the memory which is still pointed to, by k? Will changes in freeing and rellocating pointer "l" affect content of pointer "k"? Sorry, I am new to C.

之后

char *k = malloc(5); 
char *l = k;
l = realloc(l, 100);

k 也许仍然指向l,也许不是。如果k没有指向l,那么l已经被realloc释放了。

当您使用realloc时。它会尝试根据旧的内存地址获取内存,如果成功,k仍然指向l。而如果没有足够的内存,.realloc将获取新的内存,其地址与原来的完全不同旧内存,并将数据从旧内存复制到新内存。然后它将释放旧内存.

关于c - 编辑原始数组的元素、Valgrind 和功能错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com