聲明:我對C非常陌生。我試圖找到這個答案,但是我的google-fu失敗了,因爲我不完全知道我應該用於搜索...新變量指向舊變量
目前,我有一個相當意想不到的問題,其中代碼int a = 100;
在一個結構中也使一個整數也改變值。
從調試器中,我可以看到a和s-> pos指向相同的值。這是我的代碼的清理版本。
typedef struct {
char data[4096];
int start;
int end;
} buffer;
typedef struct {
int * data;
int length;
} data_format;
buffer * create_buffer() {
buffer result;
result.start = -1;
return &result;
}
data_format * method(buffer * s) {
data_format result = (data_format) { malloc(100), 0 };
... // POINT1
int a = 100;
... // POINT2
}
int main(int argc, char **argv) {
buffer * s = create_buffer();
data_format * df = method(s);
}
從調試器,我可以看到,在標有// POINT1
行,a
是-1;在// POINT2
,既a
和s->start
現在100
不應該int
聲明建立在內存現貨尚未使用的任何一個變量?
我懷疑在你沒有顯示的函數中,你正在以'result'類似的方式分配你的緩衝's',然後做'return&s'或類似的東西,因爲看起來你將會如何從顯示的功能返回結果。那是對的嗎? – iagreen
是的,s可能指向方法堆棧的開始,malloc,0和100與buffer.data,start和end重疊。雖然不能確定發佈的代碼是否不完整。它甚至沒有編譯。 – aib
@iagreen我剛剛編輯了這個問題。如你所說,我確實創造了一些東西。但我沒有看到'a'可以被分配與's-> start'相同的內存點。我的代碼很雜亂,充滿了其他東西。然而,我的編輯應該使代碼現在可編譯... – jdferreira