gpt4 book ai didi

c - 释放 malloc 失败

转载 作者:行者123 更新时间:2023-12-03 19:58:29 24 4
gpt4 key购买 nike

我有这样的东西

char *temp, xyz;
temp = (char *)malloc(sizeof(somestring));

xyz = (char *) malloc(sizeof(temp));
xyz= strrchar(temp, "_"); // temp does not contain "_", but need to check for error validation

现在如果我尝试做 免费(临时);它崩溃了;

任何想法,我是初学者。

最佳答案

第一个问题是 xyz 没有被声明为 char *,只有一个 char .

给定以下变量声明:

char *temp, xyz;
  • temp 是指向 char 的指针。
  • xyz 只是一个 char

* 适用于这两个变量。要使两个变量都指向 char,请使用:

char *temp, *xyz;

接下来:您混淆了 sizeofstrlen 的用法。 sizeof 为您提供类型或该类型的变量占用的大小。因此,如果 tempchar *,则 sizeof(temp) 将是指针的大小,不是 C字符串的长度。获取 C 字符串长度 - 例如获取复制给定 C 字符串所需的缓冲区大小 - 使用 strlen .

最后,除非你省略了一些重要的代码,否则还有另一个问题:简单地使用 malloc 不会对新分配的内存做任何事情,所以之后:

temp = (char *)malloc(sizeof(somestring));

temp 指向未初始化的内存位(如前所述,由于使用 sizeof 而不是 strlen<,它可能比您认为的要小)。然后你继续使用temp,就好像它是一个有效的 C 字符串,带有 strchr。这可能会访问不属于您的内存,从而调用未定义的行为。

关于c - 释放 malloc 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029061/

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