Я полностью готов сказать, что я делаю что-то глупое/неправильное; это то, что я ожидаю.Указатели на структуры, изменяющие значения, необъяснимые
Я получаю представление о структурах и приступает к обработке, когда дело доходит до доступа к полям из указателей. Код для подражания.
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, которая принимает указатель созданной структуры, вводит ее и недействителен (модифицирует элементы структуры, обозначенной от указателя, а не пытаться создать структуру внутри функции). –
новая функция слишком болезненна ... худший способ сделать это, она даже не ремонтируется. вы должны malloc блок вместо этого. ваша проблема вызвана стеком. адрес, который вы возвращаете, находится в стеке, однако эта часть стека используется 'printf', т. е. данные повреждены. – HuStmpHrrr