笔记:C语言

1.在vs2015导入c的源码给c++调用
参考
https://blog.csdn.net/daniaokuye/article/details/78896456

2.error C4703: 使用了可能未初始化的本地指针变量“xxx”
原因 开启了 “安全开发生命周期(SDL)检查”,如果勾选上这一项,那么他将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译。
项目属性->配置属性->C/C+±>SDL检查,选择 否。

3.动态内存分配 malloc() 函数
该函数用来动态地分配内存空间,其原型为:

void* malloc (size_t size);

【参数说明】size 为需要分配的内存空间的大小,以字节(Byte)计。

【函数说明】malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。calloc() 函数可以分配内存的同时进行初始化

【返回值】分配成功返回指向该内存的地址,失败则返回 NULL。
由于申请内存空间时可能有也可能没有,所以需要自行判断是否申请成功,再进行后续操作。

如果 size 的值为 0,那么返回值会因标准库实现的不同而不同,可能是 NULL,也可能不是,但返回的指针不应该再次被引用。

注意:函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。所以在使用 malloc() 时通常需要进行强制类型转换,将 void 指针转换成我们希望的类型,例如:

char *ptr = (char *)calloc(10, 10);  // 分配100个字节的内存空间

calloc() 与 malloc() 的一个重要区别是:calloc() 在动态分配完内存后,自动初始化该内存空间为零,而 malloc() 不初始化,里边数据是未知的垃圾数据。下面的两种写法是等价的:

// calloc() 分配内存空间并初始化
char *str1 = (char *)calloc(10, 2);

// malloc() 分配内存空间并用 memset() 初始化
char *str2 = (char *)malloc(20);
memset(str2, 0, 20);

4.释放内存空间 free()函数
free() 函数用来释放动态分配的内存空间,其原型为:

    void free (void* ptr);

free() 可以释放由 malloc()、calloc()、realloc() 分配的内存空间,以便其他程序再次使用。

【参数说明】ptr 为将要释放的内存空间的地址。

free() 只能释放动态分配的内存空间,并不能释放任意的内存。下面的写法是错误的:

int a[10];
// ...
free(a);

如果 ptr 所指向的内存空间不是由上面的三个函数所分配的,或者已被释放,那么调用 free() 会有无法预知的情况发生。

如果 ptr 为 NULL,那么 free() 不会有任何作用。

注意:free() 不会改变 ptr 变量本身的值,调用 free() 后它仍然会指向相同的内存空间,但是此时该内存已无效,(free函数相当于做了个标记,告诉系统这块内存不用了,一旦调用后, 那个地址是不被保护的,其他的变量随时可能占用那个地址。)不能被使用。
所以建议将 ptr 的值设置为 NULL.
参考
http://c.biancheng.net/cpp/html/134.html

你可能感兴趣的:(Coding,C语言)