C语言 整理错误合集

C语言 整理错误合集


1、VS2013的C4996错误

原因:由于微软在VS2013中不建议再使用C的传统库函数scanf,strcpy,sprintf等,所以直接使用这些库函数会提示C4996错误

#define _CRT_SECURE_NO_WARNINGS     //这个宏定义最好要放到.c文件的第一行
#pragma warning(disable:4996)      //或者使用这个
解决方案

2、内存常见问题

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

// 6、值传递与地址传递
// 值传递形参不能改变实参的值
// 地址传递形参可以改变实参的值
//void fun(int* p)
//{
//    p = (int*)malloc(sizeof(int) * 10);
//}
// 解决1
//void fun(int** p)
//{
//    *p = (int*)malloc(sizeof(int) * 10);
//}
// 解决2 返回值
// int* fun()
// {
//     int* p = (int*)malloc(sizeof(int) * 10);
//     return p;
// }

int main(void)
{
    // 1、数组下标越界
    // char ch[11] = "hello world";

    // 2、堆空间越界
    // 释放会出现问题
    // char* p = (char*)malloc(sizeof(char) * 11);
    // strcpy(p, "hello world");
    // printf("%s
", p);
    // free(p);

    // 3、野指针
    // 0字节空间、释放会出现问题
    // int* p = (int*)malloc(0);
    // 无法根据类型开辟相应空间、存在使用内存溺出
    // int* p = (int*)malloc(10);
    // *p = 100;
    // printf("%p
", *p);
    // free(p);

    // 4、堆空间不允许多次释放
    // int* p = (int*)malloc(sizeof(int) * 10);
    // free(p);
    // 解决:p = NULL // 空指针允许多次释放
    // free(p);


    // 5、指针叠加、修改指针
    // int* p = (int*)malloc(sizeof(int) * 10);
    // 解决:int* temp = p
    // for (int i = 0; i < 10; i++)
    // {
    //     *p = i;
        // 指针叠加不断改变指针方向、释放会出错
        //     p++;
        // }
    // free(p);

    // 6、值传递与地址传递
    // int* p = NULL;
    // fun(p);
    // for (int i = 0; i < 10; i++)
    // {
    //     p[i] = i;
    // }
    // free(p);
    // 解决
    // int* p = NULL;
    // fun(&p);
    // for (int i = 0; i < 10; i++)
    // {
    //     p[i] = i;
    // }
    // free(p);

    return 0;
}
内存常见问题

原文地址:https://www.cnblogs.com/xiangsikai/p/12371563.html