C CPPU Test Pointer Mock SegfaultC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C CPPU Test Pointer Mock Segfault

Сообщение Anonymous »

У меня есть Segfault, потому что у меня есть макет Cpputest, который возвращает указатель на структуру, в тот момент, когда вызов макет, и внутри самого макета адрес структуры является чем -то вроде, например, 0x7ffd59372178, но, но, но, но, но, но, но, например, 0x7ffd59372178, но. Когда я проверяю адрес указателя в функции, которая передается указатель на структуру с помощью макета, он заканчивается усеченной версией адреса, например, 0x59372178, тогда он пытается использовать указатель и сегфулты Потому что он не смотрит на правильный адрес памяти. и поведение было таким же. Я также попытался сделать то же самое с поплавковым указателем, чтобы посмотреть, сработает ли это, но это также столкнулось с той же проблемой. При написании этого примера (который на самом деле работает правильно), я доказал, что это не проблема с взаимодействием между C и CPP, поэтому я думаю, что теперь мне нужно исследовать мой Buildchain. < /P>
Что могло быть вероятной причиной (ы) усечения адреса указателя, который я вижу? -Верд ">#include "CppUTest/TestHarness.h"
#include "CppUTestExt/MockSupport.h"
#include "CppUTest/CommandLineTestRunner.h"

extern "C"
{
#include "includes.h"
#include

DivStruct_t* GetDivPtr()
{
void* retVal = mock().actualCall("GetDivPtr").returnPointerValue();

printf("fake div in mock %p \n", retVal);

return (DivStruct_t*)retVal;
}
}

TEST_GROUP( mockTest )
{
void setup()
{
// Initialize before each test
}

void teardown()
{
// Deinitialize after each test
mock().clear();
}
};

TEST ( mockTest, passingPointer )
{
DivStruct_t fakeDiv;
fakeDiv.f1 = 8.0;
fakeDiv.f2 = 6.0;
printf("fake div addr %p \n", (void*)&fakeDiv);
mock().expectOneCall("GetDivPtr").andReturnValue(&fakeDiv);

Cfunction();

mock().checkExpectations();
}
< /code>
function.c
#include "includes.h"
void Cfunction()
{
DivStruct_t* div = GetDivPtr();
// seg fault happens here
printf("div addr %p \n", (void*)&div);
float f1Val = div->f1;

return;
}
< /code>
includes.h
typedef struct
{
float f1;
float f2;
} DivStruct_t;

DivStruct_t* GetDivPtr();
void Cfunction();
< /code>
main.cpp
#include "CppUTest/CommandLineTestRunner.h"

int main( int ac, char ** av )
{
return CommandLineTestRunner::RunAllTests( ac, av );
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... k-segfault
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»