内存分配的问题

当我们使用一个变量(特别是指针)的时候肯定是要给他分配内存的,不然很容易造成错误。

分配内存的方式有两种:

1 声明时分配。比如 int a[10],分配给数组a 一个首地址和10*int的地址空间。

2 初始化系统自动分配内存。比如, char* s="hello world";编译器会根据初始化的内容自动指定分配内存的大小。

看下面这个例子:

这本来是个循环读取图片显示的函数(由于没有定义窗口函数句柄,只能显示最后一个,文章意不在此,姑且拿来一用)

但是发现printf和imshow函数一下可以输出和显示,一下又不行,输出失败的次数比显示失败的次数少。

Sprint送入colorImgPath的路径是绝对正确的,为什么会出现这个现象呢?

原来是 char* colorImgPath 只声明而没有分配内存,分配内存就告诉系统这块地址是我的,别人不能动,一直到我释放这个地址。可是现在colorImgPath并没有告诉系统这一点,所以它指向了一个未知的地址,而这个未知的地址在系统的运行中又被别的变量所占用并修改了里面的内容。当运行到printf和imshow时,从colorImgPath这个指针中读出来的内容早就不知道被修改成啥了,当然无法显示了!

原文地址:https://www.cnblogs.com/Daringoo/p/4435729.html