gpt4 book ai didi

c - "CRT detected that the application wrote to memory after end of heap buffer"?当我释放C中的内存时

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
printf("Input 10 string\n");
char** inputStr = (char**)malloc(sizeof(char*) * 10);
for (int i = 0; i < 10; i++) {
char str[16];
int len = strlen(str);
printf("String %d : ", i + 1);
scanf("%s", str);
*(inputStr + i) = (char*)malloc(sizeof(char) * (strlen(str) + 1));
strcpy(*(inputStr + i), str);
}

/*
do something
*/

for (int i = 0; i < 10; i++) {
free(*(inputStr + i));
}
free(inputStr);
return 0;
}

当我在 VisualStudio 2017 中处理此代码时,出现错误,显示消息“CRT 检测到应用程序在堆缓冲区末尾写入内存”。

我删除了使用“free”关键字的代码部分,然后它就可以正常工作了。

但是我了解到在“malloc”之后使用“free”是必不可少的。那么我怎样才能正确释放内存呢???

最佳答案

the application wrote to memory after end of heap buffer

听起来您的程序在指针数组的 inputStr 末尾之后写入了内存,或者可能在单个字符串缓冲区之一的末尾之后写入了内存。但是,您发布的代码似乎没有这个问题。也许您无意中在 /* do some */ 部分中的某个缓冲区末尾做了一些事情?

正如 BLUEPIXY 所建议的,您确实存在潜在的堆栈缓冲区溢出问题:如果您将超过 15 个字符读入 str,那么您将覆盖堆栈内存。当str的内容是未初始化的堆栈垃圾时,调用strlen(str)是没有意义的。

关于c - "CRT detected that the application wrote to memory after end of heap buffer"?当我释放C中的内存时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879713/

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