gpt4 book ai didi

c - 运行时错误: *** glibc detected ***

转载 作者:行者123 更新时间:2023-11-30 21:45:45 26 4
gpt4 key购买 nike

我正在尝试随机的事情,以了解更多关于 malloc、realloc 和 free 以及它们一起使用时的行为方式。

我将包含代码和我的想法我想要做什么。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
char *str;

/* Initial memory allocation */
str = (char *) malloc(15);
strcpy(str, "63tczfqV4nqB2YnH9iFJbGvGyyDkvK341rrj0G0mo1PEYniOVHejVIFIQnJzHSSMRbuyGMCZ4M5HFMV4y1q4QgYqyxp2XkTjxaolKTkaw1r25S2Emz061tw1");
printf("String = %s, Address = %u\n", str, *str);

/* Reallocating memory */
str = (char *) realloc(str,16);
strcat(str, "12345678");
printf("String = %s, Address = %u\n", str, *str);

free(str);
return 0;
}

我希望我的代码表现如下:

  1. 我使用 malloc 创建了一个字符类型内存指针,最多指向 15 个字节的内存。
  2. 使用该字符指针,我使用 strcpy 保存了 120 个字符。
  3. 我将字符指针的大小调整为现在(最大)16 个字节。
  4. 我使用 strcat 将另外 8 个字符连接到已容纳 120 个字符的内存缓冲区。
  5. 现在,我的字符指针应该指向 128 个字符,我尝试重现该情况,但是,128 个字符失败(但打印了使用 strcpy 保存的较早的 120 个字符)。

确切的错误是这样的:

 ***** glibc detected *** ./a.out: realloc(): invalid next size: 0x0000000001690010 *****

控制台卡在这个上,也就是说,我想它从未移动过realloc线?

最佳答案

让我们看看代码的前两行:

str = (char *) malloc(15);
strcpy(str, "63tczfqV4nqB2YnH9iFJbGvGyyDkvK341rrj0G0mo1PEYniOVHejVIFIQnJzHSSMRbuyGMCZ4M5HFMV4y1q4QgYqyxp2XkTjxaolKTkaw1r25S2Emz061tw1");

此时,你已经打破了C语言的规则。 strcpy 将写入超过 str 的末尾,这会导致未定义的行为。

这之后发生的一切都还悬而未决。

关于c - 运行时错误: *** glibc detected ***,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377994/

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