當前位置:編程學習大全網 - 源碼下載 - c++ new 內存不夠(拋出bad_alloc異常)怎麽解決?

c++ new 內存不夠(拋出bad_alloc異常)怎麽解決?

//重載輸入流操作(>>)

istream&?operator>>?(istream&?is,?String?&other)

{

//預分配100個空間

char?*str?=?(char?*)malloc(sizeof(char)*100);

char?*buf?=?str;

int?i?=?1;

//預處理:跳過流裏面的所有空格和回車

while?((*buf?=?getchar())?==?'?'?||?(*buf?==?'\n'));

for?(?;?;?++i)

{

if?(*buf?==?'\n')?//回車跳出

{

*buf?=?'\0';

break;

}

else?if?(*buf?==?'?')?//空格跳出

{

*buf?=?'\0';

break;

}

else?if?(i?%?100?==?0)?//空間不足

{

i?+=?100;?//追加100個空間

str?=?(char?*)realloc(str,i);

}

else//每次getchar()壹個值

{

buf?=?(str+i);//為了避免realloc返回首地址改變,不使用++buf,而是用str加上偏移.

//每次讀取壹個字符

*buf?=?getchar();

}

}

//至此:輸入完成

//我原本已經重載了=號

other?=?str;?//拷貝:將臨時開辟空間裏頭的數據,拷貝如字符串中

free(str);?//釋放臨時開辟的空間

str?=?NULL;

buf?=?NULL;

return?is;

}

這是我看了VS2010裏面string,動態輸入實現原理仿照寫的壹個。

它主要是先預開辟壹段空間,然後壹直是按照每次追加壹個字符的原理輸入,妳可以看壹下VS2010裏面的源碼,如下圖:

  • 上一篇:如何獲取QQ空間和網頁裏的FLASH和視頻地址
  • 下一篇:Python 比 Java 牛在哪
  • copyright 2024編程學習大全網