我完全準備好被告知我正在做一些愚蠢/錯誤的事情;這是我所期望的。指向結構,字段莫名其妙地改變值
當我從指針訪問字段時,我感覺到了結構,並且出現了一個裁剪器。要遵循的代碼。
matrix.h:
#ifndef MATRIX_H_INCLUDED
#define MATRIX_H_INCLUDED
#include <stdlib.h>
typedef struct
{
size_t size;
int* vector;
} vector_t;
#endif // MATRIX_H_INCLUDED
的main.c:
#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
vector_t* vector_new(size_t size)
{
int vector[size];
vector_t v;
v.size = size;
v.vector = vector;
return &v;
}
int main(int argc, char* argv[])
{
vector_t* vec = vector_new(3);
printf("v has size %d.\n", vec->size);
printf("v has size %d.\n", vec->size);
return EXIT_SUCCESS;
}
因此,這是我創建一個大小爲3的矢量結構非常簡單的程序,指針返回結構和然後打印其大小。這在第一個打印實例上是3,然後在下一個打印中變爲2686668。到底是怎麼回事?
在此先感謝。
我建議改爲設計它,首先創建並分配結構,然後將指針傳遞給一個init函數,該函數接受所創建結構的指針,並將其作爲void(修改指向結構的成員通過指針而不是嘗試在函數中創建結構)。 – 2014-10-08 17:38:20
新的功能太痛苦了...最糟糕的做法,它甚至不可維護。您應該改爲使用malloc。你的問題是由堆棧造成的。您返回的地址在堆棧中,但是,這部分堆棧由'printf'使用,即您的數據已損壞。 – HuStmpHrrr 2014-10-08 17:57:03