gpt4 book ai didi

c++ - 使用 realloc 的动态内存重新分配

转载 作者:太空狗 更新时间:2023-10-29 23:22:40 24 4
gpt4 key购买 nike

我正在学习 C++。我正在尝试学习这种动态内存分配。在下面的代码中,我尝试使用 mallocrealloc 分配内存。

int main (void)  {
char *g = (char*) malloc (sizeof(char) * 2);
g = "ab";
g = (char*) realloc (g, sizeof(char) * 200);
strcpy (g, "cdefg");
cout << g << endl;
return 0;
}

执行此代码时出现段错误错误。

我看到其他 SO 线程建议使用 vectornew 而不是使用上述方法。因为,我正在尝试学习这种方法,所以这些答案不适用于我的问题。

我遇到过这种方法很适合的场景,例如,如果我正在使用 ifstream.read 函数读取原始文本文件并读取,假设它有 1024 字节。现在,如果我想确保我没有读到一个因 1024 字节大小而损坏的单词,我必须使用 ifstream.get 从该位置进一步阅读,直到找到空格字符。在这种情况下,我需要稍微调整缓冲区(1024)。我的意图是在这里使用 realloc 为其分配更多内存。

如果有不对的地方欢迎指正

最佳答案

g = "ab";

你让 g 指向一个位于静态存储中的 block ,而不是在堆上,然后在

g = (char*) realloc (g, sizeof(char) * 200); 

您尝试使用属于堆外的地址调用 realloc()。这是未定义的行为,会使您的程序崩溃。您只能使用 malloc()realloc()(或空指针)返回的地址调用 realloc()

问题是你的意思是:

strcpy( g, "ab" ); 

但是误写了这个:

g = "ab";

前者可以正常工作 - g 最初设置为 malloc() 返回的地址。

还有一个问题 - 您最初分配的内存太少。您应该为空终止符分配一个额外的字节。

关于c++ - 使用 realloc 的动态内存重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1636760/

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