昨天,在寫一個算法的時候,報錯R6030 CRT not initialized。
認真檢查發現,是出了比較低級的錯誤。
一、
會出錯的代碼,編譯的時候不會報錯,執行過程中報 R6030 CRT not initialized :
代碼一:
int *a= new int[];//這個是沒有指定大小
for(int i=0; i<ncount; i++)
{
? ? //對a[i]進行操作
}
//delete[]? a;//會報錯。
代碼二:
int *a= new int;//其實分配了一個int內存。
?
for(int i=0; i<ncount; i++)
{
? ? //對a[i]進行操作
}
//delete[]?
a;//會報錯。
這2種處理后,a[]可以達到你想要的效果,比如排序。
但在退出的時候,會 報 R6030 CRT not initialized。
二、理論知識:
一>new用法:
1. ?開辟單變量地址空間
1)new int; ?//開辟一個存放數組的存儲空間,返回一個指向該存儲空間的地址.
? ??int *a = new int 即為將一個int類型的地址賦值給整型指針a.?
2)int *a = new int(5) 作用同上,但是同時將整數賦值為5
2. ?開辟數組空間
一維: int *a = new int[100];開辟一個大小為100的整型數組空間
二維: int **a = new int*[5]
?for()
{a[i] = new int[6];}
三維及其以上:依此類推.
? ? ? ? ?一般用法: new 類型 [初值]
delete用法:
? ? ? ? ? 1. int *a = new int;
? ? ? ? ? ? ? ?delete a; ? //釋放單個int的空間
? ? ? ? ? 2.int *a = new int[5];
? ? ? ? ? ? ? ?delete [] a; //釋放int數組空間
?
要訪問new所開辟的結構體空間,無法直接通過變量名進行,只能通過賦值的指針進行訪問.
用new和delete可以動態開辟,撤銷地址空間.在編程序時,若用完一個變量(一般是暫時存儲的數組),
下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開辟一個空間,在用完后撤銷它.
? ? ? ? ??
一定要先知道N、M,才可以分配。
三、正確的代碼
?
int *a= new int[N];//這里一定要想辦法知道N的大小。
for(int i=0; i<ncount; i++)
{
? ? //對a[i]進行操作
}
?
delete[]?
a;//與new[]對應。
a=NULL;
轉載請注明原創鏈接: http://blog.csdn.net/wujunokay/article/details/12041699
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
