今天在使用VC++6.0调试代码过程中发现在代码中创建的sqlList,无法赋值,编译器虽然编译通过,但是Execute时一直提示“Debug
Assertion Failed! File: dbgheap.c line: 1044”。
在网上找资料后发现是指针指向异常。
我的错误代码:
void InitList(sqlList *L)
{
L = (sqlList *)malloc(sizeof(sqlList));
L -> length = 0;
}
void DestoryList(sqlList *L)
{
free(L);
}
int main()
{
sqlList L;
InitList(&L);
DestoryList(&L);
return 0;
}
问题出在函数InitList中。编译器总是要为函数的每个参数制作临时副本,指针参数L的副本是 _L,编译器使 _L = L。如果函数体
内的程序修改了_L的内容,就导致参数L的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_L申请了新的内存
,只是把_L所指的内存地址改变了,但是L丝毫未变。所以函数InitList并不能输出任何东西。事实上,每执行一次InitList就会泄
露一块内存,因为没有用free释放内存。
如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”。
修改后的代码为:
void InitList(sqlList **L)
{
*L = (sqlList *)malloc(sizeof(sqlList));
(*L) -> length = 0;
}
void DestoryList(sqlList **L)
{
free(*L);
}
int main()
{
sqlList *L;
InitList(&L);
DestoryList(&L);
return 0;
}
程序可以成功编译和执行。
分享到:
相关推荐
c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针...
C语言指针函数和函数指针详细介绍.
c语言函数指针和指针函数.pdf
在C语言程序中,函数定义了之后,系统为该函数分配一段存储空间。其中函数的起始地址称为该函数的入口地址,将此地址赋给另一个变量,则该变量为一个指向函数的指针变量。 函数型指针变量的定义: 类型 (*标识符)( )...
C语言的简单基本实例,包括循环、嵌套、数组、指针、函数、结构体等内容。
C语言中关于函数指针的用法。。。。。。。。。。。。。
C语言函数指针与指针函数训练.zip
c语言实现 通过指针调用函数的形式 实现冒泡排序
主要给大家介绍了关于C语言中二维数组作为函数参数来传递的三种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
这里面对指针做了详细的分析,搞定这个分析,你绝对搞定指针,掌握c语言!
学习c语言函数指针和指针函数.pdf
通过学习可以全面掌握C语言中的指针知识,熟练使用指针与字符串、指针数组、动态内存分配和函数指针。 使用建议: 重点学习指针与动态内存分配,以及函数指针的使用。针对示例代码进行实践是一个好方法。本课件内容...
C语言指针数组函数笔记,自己总结的,希望有帮助
c语言函数指针和指针函数[收集].pdf
C语言中指针、数组和函数的综合应用与实例解析.pdf
C语言函数指针小结C语言函数指针小结
C语言中的指针学习 C语言中的指针学习 C语言中的指针学习
课程思政-C语言程序设计-指针基础
C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言...
C语言指针理解C语言指针理解C语言指针理解