1. 程式人生 > >關於new 與 malloc的一個問題

關於new 與 malloc的一個問題

using namespace std;
#include<iostream>

int main(){
 
char str1[100]="abcdefg";
char str2[10]="hijk";

 int n=strlen(str1);
 strcpy(str1+n,str2);

cout<<str1<<endl
 return 0;
}

直接用陣列定義才正確,下面這兩種都不正確:

使用malloc手動分配記憶體

int main(){
 
char *str1=(char *)malloc(100*sizeof(char));
char *str2=(char *)malloc(100*sizeof(char));
str1="abcdefg";
str2="hijk";

 int n=strlen(str1);
 strcpy(str1,str2);
 //memcpy(str1,str2,1);
 cout<<str1<<endl;
 getchar();
 return 0;
}

使用指標,new分配記憶體

int main(){
 
 char *str1=new char[100];
 char *str2=new char[100];
str1="abcdefg";
str2="hijk";

 int n=strlen(str1);
 strcpy(str1+n,str2);
 cout<<str1<<endl;
 return 0;
}

不都分配了記憶體嗎?怎麼回出錯

看下面的解決方法http://blog.csdn.net/daiyutage/article/details/8605580

然後我們知道了,原來對str1我們賦值字串後,存放在了文字常量區,不可修改,出現錯誤!

相關推薦

關於new malloc一個問題

using namespace std; #include<iostream> int main(){ char str1[100]="abcdefg"; char str2[10]="hijk"; int n=strlen(str1); strcp

C++:newmalloc的區別

函數 rim 自定義類 對象分配 文件 而是 計算 動態申請 成功 1.屬性 new/delete是操作符,是C++關鍵字,需要編譯器支持;malloc/free是庫函數,需要頭文件支持。 2.參數 使用new操作符動態分配內存時無需指定內存塊大小,編譯器會根據類型自行計算

newmalloc的10點區別

閱讀目錄 new與malloc的10點區別 1. 申請的記憶體所在位置 2.返回型別安全性 3.記憶體分配失敗時的返回值 4.是否需要指定記憶體大小 5.是否呼叫建構函式/解構函式 6.對陣列的處理 7.n

c++ new malloc有什麼區別

幾個星期前去面試C++研發的實習崗位,面試官問了個問題: new與malloc有什麼區別? 這是個老生常談的問題。當時我回答new從自由儲存區上分配記憶體,malloc從堆上分配記憶體;new/delete會呼叫建構函式/解構函式對物件進行初始化與銷燬;operator new

基礎備忘:細說newmalloc的10點區別

正文 回到頂部 前言 幾個星期前去面試C++研發的實習崗位,面試官問了個問題: new與malloc有什麼區別? 這是個老生常談的問題。當時我回答new從自由儲存區上分配記憶體,malloc從堆上分配記憶體;new/delete會呼叫建構函式/解構函式對

newmalloc的區別,以及記憶體分配淺析

二、malloc()到底從哪裡得來了記憶體空間: 1、malloc()到底從哪裡得到了記憶體空間?答案是從堆裡面獲得空間。也就是說函式返回的指標是指向堆裡面的一塊記憶體。作業系統中有一個記錄空閒記憶體地址的連結串列。當作業系統收到程式的申請時,就會遍歷該連結串列,然後就尋找第一個空間大於所申請空間的堆結點,

c++-newmalloc的區別

區別 1.malloc是C++語言的標準庫函式;而new是C++語言中的操作符。 2.new返回指定型別的指標,並且可以自動計算所需空間的大小;而malloc必須要由使用者自己計算所需空間大小,並在返回後強行轉換為實際型別的指標。

C/C++——C++中newmalloc的10點區別

前言 幾個星期前去面試C++研發的實習崗位,面試官問了個問題: new與malloc有什麼區別? 這是個老生常談的問題。當時我回答new從自由儲存區上分配記憶體,malloc從堆上分配記憶體;new/delete會呼叫建構函式/解構函式對物件進行初始化與銷燬;

newmalloc

(收集整理from web) 1.malloc與free是C++/C語言的標準庫函式,new/delete是C++的運算子。它們都可用於申請動態記憶體和釋放記憶體 2.對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行

newmalloc的區別以及實現方法

new和malloc的記憶體分配在哪 分配在堆上。也有說new是分配在自由儲存區而malloc分配在堆上,自由儲存區可以是堆也可以不是,具體要看new內部的實現。作業系統在堆上維護一個空閒記憶體連結串列,當需要分配記憶體的時候,就查詢這個表,找到一塊記憶體大於

c++ new malloc有什麽區別

這一 怎麽 參考 完成後 組類型 代碼 strong 返回值 null 前言 幾個星期前去面試C++研發的實習崗位,面試官問了個問題: new與malloc有什麽區別? 這是個老生常談的問題。當時我回答new從自由存儲區上分配內存,malloc從堆上分配內存;

new/delete malloc/free的區別

blog 們的 無法 構造函數 分配 錯誤 let light delet 一、概述 在C++中,申請動態內存與釋放動態內存用new/delete 與 malloc/free都可以,而且他們的存儲方式相同,new/malloc申請的動態內存位於堆中,無法被操作系統自

C++之new、delete malloc、free

在C/C++程式設計中經常會申請記憶體,而對記憶體的申請釋放操作有兩套方法: new、delete 與malloc、free。 1. 區別 (1). new、delete是c++中的操作符,malloc、free是C中的一個函式,它們都可用於申請動態記憶體和釋放記憶體。 (2)

new運算子malloc函式

new和malloc都是在對上開闢記憶體,但儘量使用new。 使用malloc的注意事項:(1)程式猿必須實現確定物件的長度;(2)malloc返回一個void*指標,賦值給其他型別時,必須進行強轉;(3)malloc可能申請記憶體失敗,所以必須判斷返回值來確保記憶體分配成功;(4)不會呼叫建構函式,但使用

New/deletemalloc/free的詳解

 new/delete與malloc/free的詳解 作者:華清遠見武漢華嵌技術支援曹偉東 內容清單: 1.  C語言中的函式malloc和free 2.  C++中的運算子new和delete 3.  new/delete與malloc/free之間的聯絡和區別 4. 

C/C++知識點梳理之new/deletemalloc/free的區別

1.就new/delete和malloc/free的本質而言(屬性): new/delete是C++關鍵字,而malloc/free是c語言的庫函式。其次new/free在為物件開闢/釋放空間時會呼叫物件的建構函式/解構函式;而對於非內部型別malloc/fre

newmalloc,GlobalAlloc具體解釋

signed 註意力 註意 reg 即使 ble 而在 plain free WINDOWS下最好的方式是用VirtualAlloc分配內存,他不是在堆,也不是棧,而是直接在進程的地址空間中保留一快內存。盡管用起來最不方便。可是速度快,也最靈活 new,malloc,

C++內存分配newmalloc的區別

href 構造函數 alloc 拋出異常 delete 錯誤 malloc all oid 這裏有一篇講的很詳細new和malloc的區別 總結一下: 1.new/delete是操作符,malloc/free是函數 2.malloc分配內存需指定大小,且只能是一般數據

Lambda語句中創建自定義類型時,也可指定某種特定類型,方法是在new{}之間寫上類型名稱

特定 pan sel lambda語句 lam {} where distinct select 如: var fc =...ChildFath = fc.Select(c => new Child_Father { child = c.child, father =

[Oracle][Metadata]如何查找一個功能相關的數據字典名

library ble 功能 com like -- ren target acl 當Oracel的一個新功能出來的時候,我們可能不知道所有與此功能關聯的數據字典名稱,那麽如何才能得到這些 meta data 的 meta data 呢?可以通過 dicitonary 來查