`

C语言 free错误

c 
阅读更多
#include <stdio.h>
#include <string.h>
#include <malloc.h>


int IPset(char **str_accip, int *sgin){
	char line[1024], *p = NULL;
	FILE *fp = NULL;
	memset(line, 0, 1024);
	*str_accip = (char *)malloc(sizeof(char) * 1024);

	fp = fopen("./whj.txt", "r");
	if (fp != NULL){
		while(fgets(line, 1024, fp)){
			if((p = strstr(line, "inner:yes")) != NULL){
				*sgin = 1;
				fclose(fp);
				return -1;
			}

			if((p = strstr(line, "acc_ip:")) != NULL){
				line[strlen(line)-1] = '\0';
				p+= 7;	
				*str_accip = p;

			}
		}
	}else{
                fcolse(fp);
                fp = NULL;
		return -2;
	}
	fclose(fp);
        fp = NULL;	
	return 0;
}

int main(){
	char *str = NULL;
	int sgin = 0;
	IPset(&str, &sgin);
	printf("%s, sgin=%d\n", str, sgin);

	if (str != NULL){
		free(str);
		str = NULL;
	}
	return 0;
}

编译没问题 运行的时候出现 *** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0xbfc572a3 ***


大概原因是在用mallc申请了存储空间后所返回的指针在之后的操作中使所返回的指针的指向发生了变化

str指向p  

正确代码:

#include <stdio.h>
#include <string.h>
#include <malloc.h>


int IPset(char **str_accip, int *sgin){
	char line[1024], *p = NULL;
	FILE *fp = NULL;
	memset(line, 0, 1024);
	*str_accip = (char *)malloc(sizeof(char) * 1024);

	fp = fopen("./whj.txt", "r");
	if (fp != NULL){
		while(fgets(line, 1024, fp)){
			if((p = strstr(line, "inner:yes")) != NULL){
				*sgin = 1;
				fclose(fp);
				return -1;
			}

			if((p = strstr(line, "acc_ip:")) != NULL){
				line[strlen(line)-1] = '\0';
				p+= 7;	
                                strcpy(*str_accip, p);
				fclose(fp);	
				return 0;
			}
		}
	}else
	     return -2;
}

int main(){
	char *str = NULL;
	int sgin = 0;
	IPset(&str, &sgin);
	printf("%s, sgin=%d\n", str, sgin);

	if (str != NULL){
		free(str);
		str = NULL;
	}
	return 0;
}


使用数组:

#include <stdio.h>
#include <string.h>
#include <malloc.h>


int IPset(char *str_accip, int *sgin){
	char line[1024], *p = NULL;
	FILE *fp = NULL;
	memset(line, 0, 1024);

	fp = fopen("./whj.txt", "r");
	if (fp != NULL){
		while(fgets(line, 1024, fp)){
			if((p= strstr(line, "inner:yes")) != NULL){
				*sgin = 1;
				fclose(fp);
				return -1;
			}

			if((p = strstr(line, "acc_ip:")) != NULL){
				line[strlen(line)-1] = '\0';
				p += 7;	
				strcpy(str_accip, p);

			}
		}
	}else{
	        fclose(fp);
                fp = NULL;
		return -2;
	}
	fclose(fp);
	fp = NULL;
	return 0;
}

int main(){
	char str[1024];
	int sgin = 0;
	memset(str, 0, 1024);
	IPset(str, &sgin);
	printf("%s, sgin=%d\n", str, sgin);


	return 0;
}



0
0
分享到:
评论

相关推荐

    C语言常见错误分析=。=

    然而,由于其灵活性和简洁性,C语言也容易导致一些常见的编程错误,这往往会给程序的稳定性和可维护性带来挑战。以下是针对C语言中一些典型错误的分析: 1. **命名和书写规范**:良好的命名习惯对于代码的可读性...

    C语言常见错误(word)

    C语言是一种基础且强大的编程语言,对于初学者来说,理解并掌握它可能需要克服一些常见的错误。本资源“C语言常见错误”旨在帮助新手程序员识别并预防这些常见问题,从而加速学习过程。以下是一些主要的C语言错误...

    C语言实现malloc和free

    在C语言中,`malloc`和`free`是两个非常重要的内存管理函数,它们用于动态地分配和释放内存。理解并能自己实现这两个函数对于深入理解C语言内存管理至关重要。`malloc`函数允许程序在运行时请求特定大小的内存块,而...

    试析C语言常见错误.pdf

    C语言提供了动态内存分配的功能,如`malloc`和`free`。不当的内存管理是导致程序崩溃的常见原因,如忘记释放已分配的内存、释放未分配的内存、双重释放同一块内存等。良好的编程习惯,如使用`calloc`代替`malloc`...

    C语言开发工具C—Free

    **C语言开发工具C-Free详解** C-Free是一款专为C语言开发者设计的集成开发环境(IDE),它提供了全面的功能,帮助程序员进行高效、便捷的代码编写、编译、调试和学习。C-Free不仅适合初学者,也适用于有一定经验的...

    C语言编译器C-free

    **C语言编译器C-free** C语言是一种基础且强大的编程语言,被广泛应用于系统开发、软件工程、嵌入式系统以及游戏开发等多个领域。在学习C语言的过程中,选择一个合适的编译器至关重要,C-Free就是其中的一个优秀...

    C语言中free函数的使用详解

    free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。  注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p)这句语句,如果p 是NULL 指针,...

    c语言教室(free)

    6. **内存管理**:动态内存分配(malloc、calloc、realloc、free)的概念和用法,以及内存泄漏问题。 7. **预处理器**:宏定义、条件编译指令的作用和使用。 8. **文件操作**:学习如何打开、读取和写入文件,以及...

    c-free c语言编译器

    C-Free是一款专为C语言初学者设计的轻量级集成开发环境(IDE),它以其简洁易用的界面和丰富的功能,使得学习和编写C语言代码变得更加便捷。在深入讲解C-Free之前,我们先来理解一下C语言和编译器的基本概念。 ...

    最好用的C语言编程软件C-Free 5.0带SN.zip

    C-Free 5.0是一款备受推崇的C语言编程软件,专为C语言爱好者和开发者设计。相较于Visual C++,C-Free 5.0以其简洁易用的界面和强大的功能赢得了用户的喜爱。它不仅包含了基本的代码编辑、编译、调试等必备功能,还...

    C语言经典程序100题(完整版).zip_C语言刷题程序_C语言经典100题_blankete3l_c语言编程刷题_free94

    9. **错误处理和调试**:在解决这些题目时,你也会遇到编译错误和运行时错误,这将教你如何使用调试工具,理解错误原因并修复它们。 10. **编程思维**:通过不断刷题,你会逐步培养出解决问题的系统思维,学会如何...

    c语言实例教程 free1.5

    《C语言实例教程 Free1.5》是一本专注于教授C语言编程实践的教材。C语言是一种广泛应用的编程语言,以其高效、灵活性和底层控制能力深受程序员喜爱。此教程旨在通过丰富的实例帮助初学者掌握C语言的基本概念和核心...

    c语言中易犯错误集合

    在C语言的学习过程中,由于其语法特性以及对内存管理的直接操作,初学者常常会遇到各种易犯的错误。这份“C语言中易犯错误集合”文档无疑为学习者提供了宝贵的参考,帮助他们规避陷阱,提升编程技能。下面将详细讨论...

    C语言大全,C语言大全

    《C语言大全》会介绍如何使用标准库中的错误处理函数,以及如何运用调试工具来查找和修复程序中的错误。这将帮助你培养出编写健壮代码的习惯。 书中的"应用"部分可能包括了C语言在实际项目中的应用案例,比如文件...

    c语言之蓝桥杯题库

    C语言提供了malloc、calloc、realloc和free等函数进行动态内存分配和释放,理解内存管理能避免内存泄漏和段错误,提高程序稳定性。 八、错误处理与调试 学会利用assert进行错误检查,了解如何使用printf、scanf等...

    c语言 TC201E c语言 TC201E c语言 TC201E

    10. **错误处理和调试**:学会使用编译器的错误提示,理解运行时错误,使用调试工具(如GDB)进行程序调试。 "压缩包子文件的文件名称列表"中的"C语言TC201E.scr"可能是一个屏幕录制文件或可执行程序,用于辅助教学...

    C语言课件 C语言资源

    9. **错误处理**:C语言没有内置的异常处理机制,但可以通过返回值、errno全局变量和setjmp/longjmp组合进行错误处理。 10. **实践项目**:为了巩固理论知识,课件可能会包含一些编程练习或小型项目,如实现简单的...

    C-free 3.5版本,学习C语言基础软件

    5. **帮助文档**:虽然3.5版本可能没有5.0版本那样丰富的在线帮助和错误提示,但它通常会提供一些基本的C语言参考信息,帮助用户理解和解决编程问题。 6. **适应性**:由于是旧版本,C-Free 3.5对于配置较低的...

    C语言核心编程-c语言

    6. **内存管理**:C语言允许程序员直接申请和释放内存(malloc, free),这使得C语言既灵活又危险,因为错误的内存管理可能导致内存泄漏或段错误。 7. **位操作**:C语言提供了位运算符,如位与(&)、位或(|)、位...

Global site tag (gtag.js) - Google Analytics