free():下一个大小无效(正常)&munmap_chunk():C中的无效指针[重复]

问题描述 投票:1回答:1
一次又一次调用函数enc()dec(),它会引发错误,但是会创建新的加密文件。

如果先调用enc(),然后再使用加密文件,则如果在dec()中使用,则显示

错误:munmap_chunk():无效指针] >>如果调用了enc()并终止了程序,然后运行它并在现在加密的文件上使用dec(),它会显示

错误:free():下一个大小无效(正常)>] >>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); }

反复调用函数enc()和dec(),它会引发错误,但会创建新的加密文件。如果先调用enc(),然后再使用加密文件,则如果在dec()中使用,则显示错误:...

filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
您正在为sizeof(size_t)保留空间,并且可能会调用malloc(8),请删除sizeof关键字:

filename2 = malloc(strlen(filename1) + strlen(prefix)+1);

c++ c pointers gdb dynamic-memory-allocation
1个回答
1
投票
filename2 = (char *)malloc(sizeof(strlen(filename1) + strlen(prefix)+1));
© www.soinside.com 2019 - 2024. All rights reserved.