這是一項家庭作業,所以我不想發佈任何代碼,但我非常難以理解我擁有的錯誤。Realloc C中的無效指針
目前我有一個mableced的數組,並且正在將指針複製到數組。現在,我可以memcpy和memmove這個數組,並且工作正常。
但是,當我做一個realloc與一個無效指針錯誤出現 - 我完全不知道爲什麼。
任何人都可以幫忙嗎?
這是一項家庭作業,所以我不想發佈任何代碼,但我非常難以理解我擁有的錯誤。Realloc C中的無效指針
目前我有一個mableced的數組,並且正在將指針複製到數組。現在,我可以memcpy和memmove這個數組,並且工作正常。
但是,當我做一個realloc與一個無效指針錯誤出現 - 我完全不知道爲什麼。
任何人都可以幫忙嗎?
你說'我將指針複製到另一個變量'。問題是,只要您執行realloc,原始指針不再有效。我沒有看到將指針複製到變量的原因?
這只是爲了幫助我的想法 - 我現在已經拿出來,並直接調用realloc到陣列上 - 它仍然崩潰 – praks5432
所以基本上你做void * ptr = malloc(100); void * next_ptr = realloc(ptr,200);你會得到無效的指針?編號說通過你的代碼在點上打印出一些值,除非你有一個方便的調試器。看看你從malloc返回的值是什麼,然後看看傳遞給realloc的是什麼。我會認爲他們是不同的。看看變量的值在各個點上,直到你縮小什麼線正在改變它 –
好的我正在查看memcpy完成,並在其上完成realloc的數組的內存地址,他們是完全一樣的 – praks5432
realloc()
只有當指針你傳遞這是一個從malloc()
,calloc()
或realloc()
(或者是NULL
,在這種情況下,它的工作原理完全一樣malloc()
)早些時候返回工作。你不能在數組上調用它。如果你有一個struct
這樣的:
struct foo {
char a;
int x[5];
double z;
};
那麼你就不能使用realloc()
增加x
大小。相反,您必須切換到使用完全動態分配:結構成員更改爲指針:
struct foo {
char a;
int *x;
double z;
};
...當你創建struct
的實例,調用malloc()
的初始分配:
struct foo f;
f.x = malloc(5 * sizeof f.x[0]);
現在您可以致電realloc()
f.x
,但代價是當您不再需要結構時,您還必須在f.x
上致電free()
。
當realloc
或free
導致無效指針錯誤或段錯誤,,你一定要傳遞從malloc
得到一個有效的指針,然後一個很好的可能性是,你破壞你的記憶:你寫的區域其中malloc
用於存儲內存塊的記錄。在你的情況下,這是一個memcpy
或memmove
呼叫。
您可以使用valgrind內存錯誤檢測器來幫助您找到這些類型的錯誤。
只有當您顯示'realloc'和朋友的代碼時。 – Jon
你能提供你的代碼嗎? – Xyand
添加一些代碼...我們不能得到什麼問題。 –