VLine[-1]=VLine[width]=128 数组的负一地址代表啥
最近在調算法是,涉及到rgb轉yuv數據的一個函數,出現了這種常見錯誤:如下
?unsigned char *VLine = (new unsigned char[width+2]);//+1;??
?//ULine[-1]=ULine[width]=128;?? //-1的16位二進制表示:1111 1111 1111 1111
?此時uline mem指向0xFFFF這個地址。
delet []VLine;
結果.如果住掉賦值128的那一行,正確通過沒錯,要是不住掉就會產生heap堆內存錯誤信息;
問題原因:
1.是有關數組-1,-2,-3,-4的地址代表分配頭信息,不然free(x)可以不要知道大小就可以釋放的原因;
2.vline指向動態分配后的地址,然而又對其進行賦值,造成vline指向了一個常量空間地址,,只讀data段上,而不是堆區域了,常量地址的分配內存,只能在程序退出后才能自動釋放。
:指向的是個定長且固定內容的指針,不存在變化,所以不用釋放。而且,你也無法釋放,等程序結束自動釋放
?
解決辦法:
1.
point = new char[5];point = "fda";//這句話注銷了就對了 不知道為什么
--------------------------------------------------------------------------
point = "fda"
應改為:
memmove( point, "fda", 3);
或:
strcpy( point, "fda");
在最前面加上:
#include "string.h"
2.point[0] = 'f'; point[1] = 'd'; point[2] = 'a';
附上相關資料:
http://dearymz.blog.163.com/blog/static/205657420062271155250/
http://bbs.csdn.net/topics/390359048
http://zhidao.baidu.com/link?url=o9US18FIs-JuvBOQgNTL1diMNfiyRoGvOGHMlKoDZCGMu1UApWeIVuy-8UO4MV-0Jlryiz05jaKvK4RQfDRh0a
http://wenku.baidu.com/link?url=KrHpusbOUWu25UK0WbNdP3ZDsBT_jKe4nptbEu8h6cbULhVVHB_R5RLm8zl_oSE6-by5QG3jay9-o8lQOVDDP6Gq3-oNvuCJu2HATkz8Er7 delet 常犯的幾種錯誤
http://bbs.pediy.com/showthread.php?t=176091 delet 出問題
http://bbs.csdn.net/topics/300170474?a[-1]問題
http://blog.csdn.net/daniel_ice/article/details/6857019?匯編解釋數組和取數組
轉載于:https://www.cnblogs.com/pengkunfan/p/3847686.html
總結
以上是生活随笔為你收集整理的VLine[-1]=VLine[width]=128 数组的负一地址代表啥的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#将image中的显示的图片转换成二进
- 下一篇: Axure RP原型设计工具