free():下一个大小无效(正常)& munmap_chunk():C 中的指针无效
free(): invalid next size (normal) & munmap_chunk(): invalid pointer in C
一次又一次调用函数 enc()
和 dec()
,它抛出错误,但创建了新的加密文件。
如果先调用enc()
再使用加密文件,如果在dec()
中使用则显示错误:munmap_chunk(): invalid pointer
如果调用 enc()
并且您终止程序,稍后 运行 它并在现在加密的文件上使用 dec()
,它显示 错误:免费( ): 下一个尺寸无效(正常)
void enc()
{
FILE *fp1, *fp2;
char filename1[FILENAME_MAX];
int i;
int size;
int shift;
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
while((fp1 = fopen(filename1, "r")) == NULL){
fprintf(stderr, "Error: Unable to open file %s\nTry Again\n", filename1);
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
}
printf("Enter shift:");
scanf("%d",&shift);
const char *prefix = "encrypted_";
char *filename2;
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
strcpy(filename2, prefix);
strcat(filename2, filename1);
if ((fp2 = fopen(filename2, "w")) == NULL) {
fprintf(stderr, "Error: Unable to open file %s\n", filename1);
exit(EXIT_FAILURE);
}
free(filename2);
int ch;
while ((ch = getc(fp1)) != EOF) {
if (ch >= 'A' && ch <= 'Z') {
putc(((ch - 'A') + shift) % 26 + 'A', fp2);
}
else if (ch >= 'a' && ch <= 'z') {
putc(((ch - 'a') + shift) % 26 + 'a', fp2);
}
else {
putc(ch, fp2);
}
}
fclose(fp1);
fclose(fp2);
}
void dec()
{
FILE *fp1, *fp2;
char filename1[FILENAME_MAX];
int i;
int size;
int shift;
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
while((fp1 = fopen(filename1, "r")) == NULL){
fprintf(stderr, "Error: Unable to open file %s\nTry Again\n", filename1);
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
}
printf("Enter shift:");
scanf("%d",&shift);
shift = 26-(shift%26);
const char *prefix = "decrypted_";
char *filename2;
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
strcpy(filename2, prefix);
strcat(filename2, filename1);
if ((fp2 = fopen(filename2, "w")) == NULL) {
fprintf(stderr, "Error: Unable to open file %s\n", filename1);
exit(EXIT_FAILURE);
}
free(filename2);
int ch;
while ((ch = getc(fp1)) != EOF) {
if (ch >= 'A' && ch <= 'Z') {
putc(((ch - 'A') + shift) % 26 + 'A', fp2);
}
else if (ch >= 'a' && ch <= 'z') {
putc(((ch - 'a') + shift) % 26 + 'a', fp2);
}
else {
putc(ch, fp2);
}
}
fclose(fp1);
fclose(fp2);
}
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
您正在为 sizeof(size_t)
保留 space 并可能调用 malloc(8)
,删除 sizeof
关键字:
filename2 = malloc(strlen(filename1) + strlen(prefix)+1);
一次又一次调用函数 enc()
和 dec()
,它抛出错误,但创建了新的加密文件。
如果先调用enc()
再使用加密文件,如果在dec()
中使用则显示错误:munmap_chunk(): invalid pointer
如果调用 enc()
并且您终止程序,稍后 运行 它并在现在加密的文件上使用 dec()
,它显示 错误:免费( ): 下一个尺寸无效(正常)
void enc()
{
FILE *fp1, *fp2;
char filename1[FILENAME_MAX];
int i;
int size;
int shift;
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
while((fp1 = fopen(filename1, "r")) == NULL){
fprintf(stderr, "Error: Unable to open file %s\nTry Again\n", filename1);
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
}
printf("Enter shift:");
scanf("%d",&shift);
const char *prefix = "encrypted_";
char *filename2;
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
strcpy(filename2, prefix);
strcat(filename2, filename1);
if ((fp2 = fopen(filename2, "w")) == NULL) {
fprintf(stderr, "Error: Unable to open file %s\n", filename1);
exit(EXIT_FAILURE);
}
free(filename2);
int ch;
while ((ch = getc(fp1)) != EOF) {
if (ch >= 'A' && ch <= 'Z') {
putc(((ch - 'A') + shift) % 26 + 'A', fp2);
}
else if (ch >= 'a' && ch <= 'z') {
putc(((ch - 'a') + shift) % 26 + 'a', fp2);
}
else {
putc(ch, fp2);
}
}
fclose(fp1);
fclose(fp2);
}
void dec()
{
FILE *fp1, *fp2;
char filename1[FILENAME_MAX];
int i;
int size;
int shift;
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
while((fp1 = fopen(filename1, "r")) == NULL){
fprintf(stderr, "Error: Unable to open file %s\nTry Again\n", filename1);
printf("Enter filename:");
scanf(" %[^\n]s",filename1);
}
printf("Enter shift:");
scanf("%d",&shift);
shift = 26-(shift%26);
const char *prefix = "decrypted_";
char *filename2;
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
strcpy(filename2, prefix);
strcat(filename2, filename1);
if ((fp2 = fopen(filename2, "w")) == NULL) {
fprintf(stderr, "Error: Unable to open file %s\n", filename1);
exit(EXIT_FAILURE);
}
free(filename2);
int ch;
while ((ch = getc(fp1)) != EOF) {
if (ch >= 'A' && ch <= 'Z') {
putc(((ch - 'A') + shift) % 26 + 'A', fp2);
}
else if (ch >= 'a' && ch <= 'z') {
putc(((ch - 'a') + shift) % 26 + 'a', fp2);
}
else {
putc(ch, fp2);
}
}
fclose(fp1);
fclose(fp2);
}
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
您正在为 sizeof(size_t)
保留 space 并可能调用 malloc(8)
,删除 sizeof
关键字:
filename2 = malloc(strlen(filename1) + strlen(prefix)+1);