c - 错误 :"pointer being realloc' d 未分配”在 macOS 上,但在 Windows 上尝试重新分配两次时有效

标签 c memory memory-management malloc realloc

我正在尝试实现一个连接两个字符串的函数,但我不断收到相同的错误。 “重新分配的指针未分配” 当我在 Windows 机器上编译相同的代码时,它可以工作,这是我遗漏的东西吗? 下面的代码基本上就是我想要做的。 主要:

int main() {

int length = 4096;
char *string = malloc(length * sizeof(char));
createString(string, length);
realloc(string, 30);
return 0;
}

创建字符串:

void createString(char * string, int length) {
  char *copyAdress = string;
  char *temp ="";
  int counter2 = 0;

  fflush(stdin);
  fgets(string, length,stdin);
  while(*string != EOF && *string != *temp ) {
    string++;
    counter++;
  }
  string = copyAdress;
  realloc(string, (counter)*sizeof(char));
}

谢谢! 编辑: 我希望 createString 将字符串的大小更改为使用 fgets 获得的字符串的长度,同时与我发送的字符串具有相同的地址,这样当我想添加另一个字符串时,我可以为其分配更多内存到它。

最佳答案

有几个问题:

  1. realloc(string, (counter)*sizeof(char)); 错误,需要 string = realloc(string, (counter)*sizeof(char)) ; 因为 realloc 可能返回不同的地址。

  2. 调用 createString(string, length); 不会修改 string

如果您想要更准确的答案,您需要告诉我们确切 createString 应该做什么。在您的代码中,没有尝试连接两个字符串。

关于c - 错误 :"pointer being realloc' d 未分配”在 macOS 上,但在 Windows 上尝试重新分配两次时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52647970/

相关文章:

c - 如何将 OCaml 库移植到可从 C 代码访问的库中?

我可以将 Visual Studio 2010 Professional 设置为 C 的 IDE 吗?

c - 栈和堆的内存分配量(c)

java - 将对象的 ArrayList 拆分为大小相等的 block ,例如在 Java 中为 1 MB

Python字典和集合内存分配

ios - 如何在应用程序退出之前将变量保留在内存中

c - 流程的完整状态

javascript - QML 内存泄漏发送 XMLHttpRequest

c - const struct pointer 是否保证内存损坏/崩溃问题的安全性?

c - 我为类制作的 e^x 函数得到了错误的输出,并且得到了错误的项数