Linux下C语言环境编程(gdb调试指针)

时间:2021-11-12 09:20:23

1.vim:

Linux下C语言环境编程(gdb调试指针)

2.gcc:

Linux下C语言环境编程(gdb调试指针)

3.预处理:

Linux下C语言环境编程(gdb调试指针)

4.链接:

Linux下C语言环境编程(gdb调试指针)

5.gdb调试

Linux下C语言环境编程(gdb调试指针)

#include <stdio.h>
void swap(int a, int b)
{
    int c;
    c = a;
    a = b;
    b = c;
}

int main(void)
{
    int a = 20;
    int b = 30;

    swap (a, b);
    printf("a=%d  b=%d\n", a, b);
}

这是在swap函数中a,b的地址             这是在main函数中a,b的地址明显不一样,证明两个a,b是不一样的。所以a,b的值没有改变。还可以验证栈区地址是从上往下增长         全局变量g_argv的地址相对来说就小很多                                                                                                            
Linux下C语言环境编程(gdb调试指针)Linux下C语言环境编程(gdb调试指针)                  Linux下C语言环境编程(gdb调试指针)

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<unistd.h>


void get_memory(char *ptr, int size)
{
    ptr = malloc(size);
}

int main(void)
{
    char *ptr = NULL;
    get_memory(ptr, 100);

    strncpy(ptr, "hello", 100);
    printf("ptr: %s\n", ptr);

    free(ptr);
    return 0;
}

指针错误,内存错误,逻辑错误。

Linux下C语言环境编程(gdb调试指针)                                                                          

调试

Linux下C语言环境编程(gdb调试指针)

Linux下C语言环境编程(gdb调试指针)

Linux下C语言环境编程(gdb调试指针)

两个ptr的地址空间不同,从下图也可以看出,ptr在函数中是0x0,说明这两个ptr是不同的

Linux下C语言环境编程(gdb调试指针)

修改后的代码:

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<unistd.h>


void get_memory(char **ptr, int size)
{
    *ptr = malloc(size);
    printf(":\n");
}

int main(void)
{
    char *ptr = NULL;
    get_memory(&ptr, 100);

    strncpy(ptr, "hello", 100);
    printf("ptr: %s\n", ptr);

    free(ptr);
    return 0;
}

Linux下C语言环境编程(gdb调试指针)

Linux下C语言环境编程(gdb调试指针)