동적할당 사용한 코드 오류입니다!..
조회수 4254회
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
char *mes;
char *mes2;
char *mes3;
int i, j,temp=1;
FILE *fp = fopen("Readme.txt", "rb");
FILE *fp2 = fopen("readm.txt", "wb");
long dw;
if (fp)
{
dw = ftell(fp);
fseek(fp, 0, SEEK_END);
dw = ftell(fp);
mes = (char*)malloc(dw);
fseek(fp, 0, SEEK_SET);
fread(mes, 1, dw, fp);
for(i=0;i<dw;i++)
if (mes[i] == 'i' && mes[i + 1] == 's')
{
mes2 = (char*)malloc(dw + temp);
mes2 = mes;
mes2[i] = 'a';
mes2[i + 1] = 'r';
memmove(mes2 + i + 3, mes2 + i + 2, strlen(mes2) - i + 3);
mes2[i + 2] = 'e';
temp++;
free(mes2);
}
mes = (char*)malloc(dw + temp);
mes = mes2;
printf("mes:%s\n", mes);
}
free(mes2);
free(mes);
fclose(fp);
fclose(fp2);
}
동적할당을 사용해서 txt파일에 is라는 글자을 are로 바꿀려고 합니다.. 그런데 계속 오류가 뜨네요 어떻게 고쳐야될지 알고싶습니다!..
1 답변
-
에러메세지 "pointer being freed was not allocated"가 나는걸 말하시는건가요? 이 에러는 "네가 free하려는 pointer에는 아무것도 할당된게 없어!"라는 뜻입니다. 코드를 보니 mes2와 mes를 두번 free하네요.
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { char *mes = NULL; char *mes2 = NULL; char *mes3 = NULL; int i, j,temp=1; FILE *fp = fopen("File.txt", "rb"); long dw; if (fp) { dw = ftell(fp); fseek(fp, 0, SEEK_END); dw = ftell(fp); mes = (char*)malloc(dw); fseek(fp, 0, SEEK_SET); fread(mes, 1, dw, fp); for(i=0;i<dw;i++) if (mes[i] == 'i' && mes[i + 1] == 's') { mes2 = (char*)malloc(dw + temp); mes2 = mes; mes2[i] = 'a'; mes2[i + 1] = 'r'; memmove(mes2 + i + 3, mes2 + i + 2, strlen(mes2) - i + 3); mes2[i + 2] = 'e'; temp++; free(mes2); // 여기서 mes2를 프리합니다. } mes = (char*)malloc(dw + temp); mes = mes2; printf("mes:%s\n", mes); } free(mes2); // 위에서 free한 mes2를 또 프리하려니 에러가 나겠지요? free(mes); // mes는 mes2와 같은 값을 가지는데, 위에서 이미 mes2를 프리했으므로 에러가 납니다. fclose(fp); }
마지막 free(mes2); free(mes); 를 지우면 에러는 나지 않을거에요. 또, 코드에 불필요한 변수가 있고, 메모리 누수가 있네요!
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력