C++ 報錯 R6030 CRT not initialized__C++

來源:互聯網
上載者:User

昨天,在寫一個演算法的時候,報錯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可以動態開闢,撤銷地址空間.在編程式時,若用完一個變數(一般是暫時儲存的數組),
下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開闢一個空間,在用完後撤銷它.
          
一定要Crowdsourced Security Testing道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




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.