c-realloc在这个代码片段中做了什么



我在这里浏览了C中的relloc示例。我无法弄清楚realloc()在这个片段中到底在做什么,因为即使我注释掉realloc语句,程序也运行得很好。我再次将代码附在这里,这样会更容易通过。

#include <stdio.h> 
#include <stdlib.h>
int main()
{
char *str;
/* Initial memory allocation */
str = (char *) malloc(15);
strcpy(str, "tutorialspoint");
printf("String = %s,  Address = %un", str, str);
/* Reallocating memory */
str = (char *) realloc(str, 25);
strcat(str, ".com");
printf("String = %s,  Address = %un", str, str);
free(str);
return(0);
}

据我所知,malloc()最初将字符串分配为15字节长,然后realloc(()将其重新分配为25个字符长。但是,即使我从代码片段中删除了realloc()语句,它怎么仍然可以正常工作呢?我是不是错过了什么?

但是,即使我从代码片段中删除了realloc()语句,它怎么仍然可以正常工作呢?

如果删除realloc(),也许代码运行良好,但这是一个意外。代码仍然是错误的,缓冲区溢出,结果是"未定义的行为"——这意味着它可能工作正常,可能崩溃,可能给出错误的答案,可能格式化硬盘驱动器——它可能会做任何的事情

修复您的代码。

如果您使用的是GCC 4.8或更新版本,我建议您使用地址消毒剂。像这样编译你的代码:

gcc main.c -o main -fsanitize=address -Wall -Wextra
                   ^^^^^^^^^^^^^^^^^^

这需要在您的系统上安装地址清理程序库。或者,在Valgrind的memcheck工具中运行代码。

valgrind ./main

这两个工具都会显示您的程序是错误的。

相关内容

  • 没有找到相关文章

最新更新