У меня есть 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
C CPPU Test Pointer Mock Segfault ⇐ C++
Программы на C++. Форум разработчиков
1738878852
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 );
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79419451/c-cppu-test-pointer-mock-segfault[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия