所以,我有2段代碼,其中一段可用,另一段不可用。第一部分只是一個測試,以確定在從本地分配返回後,char指針是否仍然有效。出於某種原因,這個工程:什麼決定回收本地分配?
char* test(){
char* rawr="what";
return rawr;
}
但是這一次不工作:
char* folderfromfile(char* filz) //gets the folder path from the file path
{
//declarations
int lastslash=-1;
int i =0;
char rett[256];
for(i;(int)filz[i]!=0;i++)
if(filz[i]=='\\')
lastslash=i; //records the last known backslash
if(lastslash==-1)
return ""; //didn't find a backslash
for(i=0;i<=lastslash;i++)
rett[i]=filz[i]; // copies to new string
rett[i] =0; //end of string
cout << &rett << "====" << rett << endl;
system("pause>nul");//pause so i can watch over the memory before it deallocates
return rett;
}
我敢打賭,有一個更好的方式來完成從完整路徑刪除文件名的這個任務,但現在我只是想弄清楚爲什麼這個字符指針被刪除,而另一個不是。如果我不得不猜測我會說,因爲我以不同的方式宣佈它,或者因爲它更大。是的,我可以傳遞另一個字符指針作爲這個函數的參數,但那不會回答我的問題。
第一個*恰好工作*是因爲編譯器在堆棧外發生了什麼。使用非常量字符串,或者也許只是改變編譯器,體系結構或編譯器標誌,可能會改變這一點。甚至不要考慮寫這種破碎的代碼。 – delnan 2011-01-21 17:10:16