Я вижу то, что поставило меня в тупик.Может быть, вы, ребята, можете посоветовать.
То, что является допустимым аргументом, искажается при передаче в другую функцию.
Вот мои настройки:
- LibA.a
- LibB.a
- SampleApp
- MyApp.c
Неправильный вызов функции идет из LibA в LibB.
LibA, LibB и SampleApp были предварительно выполнены (к счастью в режиме отладки) более старой версией Sun Studio на Solaris x86 / 64.SampleApp использует как LibA, так и LibB и прекрасно работает в моей системе.
MyApp использует LibA и LibB аналогично SampleApp.Тем не менее, MyApp падает из-за этого повреждения указателя.
// File scoped string declared
static const char myString[] = "SomeText"
// The function call looks like
libAfunc(myString, myIntVar)
// The called function prototype is like
int libAfunc(const char* strArg, int intArg)
При однократном пошаговом выполнении кода я вижу, что указатель в вызывающей программе (myString
) действителен и передается в качестве параметра.В вызываемой стороне адрес в переданном указателе параметра (strArg
) просто неверен.Фактически, все параметры на самом деле неверны после передачи.
Примечание: вызывающая сторона находится в предварительно скомпилированном LibA, а вызываемая сторона находится в предварительно скомпилированном LibB.Я никогда даже не трогал этот код, так как он предварительно скомпилирован.Кроме того, сам код, вероятно, является правильным, поскольку SampleApp использует эти функции и работает нормально.(Хотя последовательность вызовов может немного отличаться ...)
Я думаю, что моя ошибка в стадии связывания, но я не уверен, что это может быть.
Есть идеи?
Спасибо