1.安装
sudo apt-get install gdb
2.使用
在gcc编译程序时候加-g参数(-g会生成debug调试信息)
例子:main.c
void mycpy(char *p)
{
p=(char *)malloc(sizeof(char)*32);
strcpy(p, "hello world");
}
int main(void)
{
char *p = NULL;
mycpy(p);
printf("%s\n", p);
return 0;
}
编译:gcc -o main main.c -g
调试: gdb main
调试命令
list--l:列举代码
run---r运行
b 行号/函数名称 ---设置断点
step--s单步调试会进到调用的函数
next--n --单步调试但是不会进入函数
print---p ---输出
watch 变量(先设置断点--》运行run--》在断点处停止后设置观测点--》
c继续运行(当要观测的变量发生变化时候就会停止))
set variable i=60设置变量
b 21 if i==50 条件断点(当i==50的时候就会在21行停止)
Gdb练习:(查找下面的错误并正确输出结果)(用gdb调试)
int array_sum(int m , int arr[m])
{
int sum = 0;
int i=0;
for(i=0; i<30; i++)
{
sum += arr[i];
}
return sum
}
int main(void)
{
int array[10]={1,2,3,4,5,6,7,8,9,11};
int sum = array_sum(10, array[10]);
printf("%d", sum);
return 0;
}
——————————————————————————————————————————————————————
c语言(数据链表)
数据:能被计算机存储和识别的信息(文字,图像,声音,视频)二进制
数据结构:数据逻辑结构,数据物理结构(数据存储结构),数据运算()
算法:解决问题的方法(时间,空间)----时间空间永远是对立的(牺牲空间换取时间)
顺序存储(顺序表)----数组(连续)
#define SIZE 10
typedef int Elemtype;
typedef struct Sqlist
{
Elemtype data[SIZE];
int length;
}Sqlist;
//1-创建
Sqlist* create_sqlist()
{
Sqlist *sqlist = (Sqlist*)malloc(sizeof(Sqlist));
sqlist->length = 0;
return sqlist;
}
//2-插入数据
bool insert_sqlist(Sqlist *sq, Elemtype data)
//3-查找数据
int local_sqlist(Sqlist *sq, Elemtype data);
//4-删除数据
bool delete_sqlist(Sqlist *sq , Elemtype data);
//5-显示数据
void display_sqlist(Sqlist *sq);
练习
从键盘插入输入一个正数插入把这个数插入到顺序表,输入负数把这个找出来删除(2把插入,-2把2删除)
创建一个顺序表实现输入数据插入到顺序表并且保证递增顺序