【发布时间】:2018-04-03 10:22:24
【问题描述】:
#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”是必不可少的。那么我怎样才能正确释放内存???
【问题讨论】:
-
1) 删除
int len = strlen(str);2)scanf("%s", str);-->scanf("%15s", str); -
尝试注释掉 do-something 的一部分。
标签: c