В проекте мне было предложено создать INT128-тип с использованием int32_t и произвести с ними постфиксные вычисления. Я использовал общий стек для отслеживания операндов. Код ниже:memcpy дает мне странные результаты со структурой
typedef struct int128
{
int32_t byteArray[4];
} INT128;
typedef struct node{
void *value;
struct node *bottom;
} NODE;
typedef struct stack{
int size;
size_t dataType;
NODE *top;
} STACK;
Я использовал тетср(), чтобы скопировать значение в INT128 в стек и обратно. Он работал хорошо, когда в стеке были только переменные char, но результаты полностью отличались от типа INT128. Я не очень хорошо разбираюсь в манипуляциях с памятью, поэтому, возможно, что-то я не вижу здесь. Спасибо!
Edit: Извините, ребята ... им с помощью функции ниже, чтобы нажать и данные поп из стека:
void push(STACK *machine,void *pushed)
{
NODE *newNode = malloc(sizeof(NODE));
newNode->value = malloc(machine->dataType);
memcpy(newNode->value,pushed,sizeof(machine->dataType));
newNode->bottom = machine->top;
machine->top = newNode;
machine->size++;
}
void pop(STACK *machine, void *poppedValue)
{
if(machine->top == NULL)
{
printf("WARNING: empty stack!\n");
}
else
{
NODE *popped = machine->top;
memcpy(poppedValue,popped->value,machine->dataType);
machine->top = popped->bottom;
free(popped->value);
free(popped);
machine->size--;
}
}
Я инициализации стека, как:
STACK *numStack = createStack(sizeof(INT128));
и используя функция push/pop функционирует нормально.
Показать код, который вы используете для копирования? – Gui13
Информация отсутствует. Вставьте код, используемый для фактического выполнения этой memcpy. – 4pie0