免責事項:私は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
宣言は、まだ何も使用されていないメモリスポットに変数を作成するべきではありませんか?