У меня есть 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