gpt4 book ai didi

c - realloc 调用太多?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:41 25 4
gpt4 key购买 nike

我有以下 C 代码:

char* str = (char*)malloc(sizeof(char));
int count = 0;

while ((c = getchar()) != EOF){
str[count] = c;
count++;
str = (char*)realloc(str, sizeof(str) + sizeof(char));
}

但它抛出错误 Unhandled exception at 0x77C8F94D (ntdll.dll) in algorithms.exe: 0xC0000374: A heap has been corrupted。多年来我一直试图解决这个问题,但无法解决问题。有趣的是,只有当输入流中有大量字符需要读取时才会出现问题。

这是因为我使用了 malloc 和 realloc 吗?

最佳答案

更正以下代码:

char* str = (char*)malloc(sizeof(char));
int count = 0;

while ((c = getchar()) != EOF){
str[count] = c;
count++;
str = (char*)realloc(str, count * sizeof(char));
}

但是,这确实使用了太多的 realloc 调用!最好只分配 block ,我也使用了 BPC 原则,而不是 MNC(见评论):

size_t limit = 1024u; // For example!
char* str = malloc(limit);
int count = 0;
while ((c = getchar()) != EOF) {
str[count] = c;
if (++count >= limit) {
limit += 1024u;
char *str2 = realloc(str, limit); // Shouldn't use same pointer ...
if (!str2) { // ... failure!
// <Some error message/flag>
break;
}
else str = str2; // Successful realloc
}
}

关于c - realloc 调用太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58048801/

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