0
所以在我的程序中,我試圖編輯原始數組「frags」的元素,最初,這些元素已經分配了存儲在某些槽中的字符串。但我不確定如何。在程序過程中,我需要重新分配原始數組中的元素,以便它們可以存儲更長的字符串,但是我的方法似乎導致了valgrind +函數錯誤。 Valgrind說錯誤來自realloc,而功能錯誤是輸出不正確。原始數組,Valgrind和功能錯誤的編輯元素
int main(void) {
char *frag[3];
char *frag1 = malloc(4), *frag2 = malloc(5);
strcpy(frag1, "him");
strcpy(frag2, "hers");
frag[0] = frag1;
frag[1] = frag2;
char *k = frag[0];
char *l = frag[1];
k = realloc(k, 500);
strcat(k, l);
printf("%s\n ", frag[0]);
printf("%s\n ", frag[1]);
free(k);
free(l);
return 0;
}
我不是100%清楚malloc和realloc如何將它們分配給不同的變量。如果你這樣做
char *k = malloc(5);
char *l = k;
l = realloc(l, 100);
你是否重新分配仍然指向k的內存?釋放和重新分配指針「l」的變化是否會影響指針「k」的內容?對不起,我是新來的C.
從'k = realloc(k,500)'重新分配後,這可能會返回與原始'k'不同的指針值。但'k' *的原始值來自'frag [0]',它保持不變。一旦你這樣做了,指針* value *不再有效,因此使用它作爲取消引用(stmt'printf(「%s \ n」,frag [0]'這樣做)是未定義的行爲。處於類似的狀態,仔細查看原因,所以是的,假設'l'返回一個非NULL值,你的最後一個樣本'k'不再有效,這是btw,而不是recall方法()'。 – WhozCraig