c语言——一级指针易错点

c语言——一级指针易错点

越界

void test(){
    char buf[3] = "abc";
    printf("buf:%s\n",buf);
}

指针叠加会不断改变指针指向

当你操作某块内存的时候,这块内存一定要是合法的(自己申请的,在使用的时候还没有释放的)

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include


//当你操作某块内存的时候,这块内存一定要是合法的(自己申请的,在使用的时候还没有释放的)
int main(){

    char *p = malloc(64);

    ++p;
    if (p != NULL)
    {
        free(p);
        p = NULL;
    }


    system("pause");
    return EXIT_SUCCESS;
}

如图


微信截图_20200516005320.jpg

同一块内存释放多次

void test(){    
    char *p = NULL;

    p = (char *)malloc(50);
    strcpy(p, "abcdef");

    if (p != NULL)
    {
        //free()函数的功能只是告诉系统 p 指向的内存可以回收了
        // 就是说,p 指向的内存使用权交还给系统
        //但是,p的值还是原来的值(野指针),p还是指向原来的内存
        free(p);
    }

    if (p != NULL)
    {
        free(p);
    }
}

你可能感兴趣的:(c语言——一级指针易错点)