編輯調用看來,這僅僅是一個示例代碼是錯的情況。感謝您解決這個問題,所以。試圖圍繞讓我的頭時,免費使用C
看一下下面的代碼/引自http://staff.um.edu.mt/csta1/courses/lectures/csa2060/c8a.html
//f.c
#include <stdio.h>
#include <stdlib.h>
char *foo(char *);
main() {
char *a = NULL;
char *b = NULL;
a = foo("Hi there, Chris");
free(a);
b = foo("Goodbye");
free(b);
printf("From main: %s %s\n", a, b);
}
char *foo(char *p) {
char *q = (char *)malloc(strlen(p)+1);
strcpy(q, p);
printf("From foo: the string is %s\n", q);
return q;
}
如果免費(B)省略了,然後「再見」可以看出,被寫入的位置「嗨,克里斯」 。
我不明白你爲什麼使用在printf()
語句中free'd變量之前調用free(事實上,在我的腦海,好像第一次釋放內存將使這一失敗)。
道歉,如果這是一個重複的,不過話說搜索/讀什麼我能找到我仍然在黑暗中。 代碼和報價都是從這裏:http://staff.um.edu.mt/csta1/courses/lectures/csa2060/c8a.html
編輯看來,這僅僅是一個示例代碼是錯的情況。感謝您解決這個問題,所以。
你也可以使用'的strdup(P)',而不是'malloc'和'的strcpy '。只是說... .. :) – Constantinius
@constantinius我敢肯定,有很多方法可以做什麼作者正在做的,我只是想明白他想要在這裏做的點 – heisenberg
我明白,對不起,沒有認識到它不是你的代碼。 – Constantinius