我工作的學校一些代碼,和這裏的的是我遇到一些麻煩的代碼片段:「的realloc():無效的指針」錯誤
// Create file path
int size_path = 11;
char* path = malloc(size_path*sizeof(char));
path = "./storage/\0";
for(i = 0; i < size_filename; i++){
size_path++;
path = realloc(path, size_path*sizeof(char));
path[size_path-1] = filename[i];
}
path[size_path] = '\0';
從本質上講,我在做什麼試圖找到一個文件的存在(例如,test.txt
),所以我需要使用access()
來檢查它的存在,但首先我需要建立path
本身,使得path = "./storage/test.txt"
我已經使用上面的方法來解析一些其他的東西,所以我知道我做的工作方式,我只是覺得我在這裏錯過了一些東西,因爲每當我嘗試運行代碼時,我都會在編譯器中看到一個錯誤:*** Error in ./a.out: realloc(): invalid pointer: 0x00000000004016c7 ***
我很好奇看到你們能提供給我的洞察力,因爲我一直在研究這個bug至少半小時,而社區幫助我在幾分鐘內解決了許多問題,所以我我確定這只是一個錯誤的事情,但我無法弄清楚它會是什麼。提前致謝!
編輯:正如我的想象,我在5分鐘內得到了我的問題的答案。事實證明,我不小心將動態分配的內存泄露,實際上並沒有將任何東西放入其中,並在之後直接靜態分配。相反,我使用strcpy(path, "./storage/")
,我得到了我正在尋找的功能。謝謝!
閱讀[問],特別是關於[作業問題]的部分(https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions)。 – Olaf
'path =「./storage/\0」;'用'char * path = malloc(size_path * sizeof(char))初始化'path'';'這會泄漏先前的分配。 – chux
推測,'path =「./storage/\0」;'應該是'strcpy(path,「./storage /」);' – ShadowRanger