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