я стараюсь практиковать общие функции написания этой функции:Программы сбой на объявлении функции прототипа
void *scramble(void *arr, int ElemSize, int n, int *indArr);
Но всякий раз, когда я запускаю программу с помощью отладчика он выходит из строя на прототип линии, используя F11 (Step Into) я вижу следующее:
1.
#else /* WPRFLAG */
__initenv = envp;
mainret = main(argc, argv, envp);
#endif /* WPRFLAG */
2.
if (!managedapp)
exit(mainret);
И тогда сообщение консоли говорит, что: The program '[8108] 1.exe: Native' has exited with code 0 (0x0).
Это моя программа (не обращайте внимания на логические ошибки кодирования, как я хочу, чтобы решить это самостоятельно):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char BYTE;
void *scramble(void *arr, int ElemSize, int n, int *indArr);
void main()
{
int indArr[5]={5,4,3,2,1};
int numbers[5]={1,2,3,4,5};
char letters[5]={'a','b','c','d','e'};
int *newNum;
char *newLet;
newNum = (int*)scramble(numbers, sizeof(int), 5, indArr);
newLet = (char*)scramble(letters, sizeof(char), 5, indArr);
}
void *scramble(void *arr, int ElemSize, int n, int *indArr)
{
int i;
BYTE *read, *write;
void *res;
res = malloc(ElemSize*n);
write = (BYTE*)res;
read = (BYTE*)arr;
for (i = 0; i < n; i++)
{
memcpy(write + indArr[i]*ElemSize, read, ElemSize);
read += ElemSize;
}
return res;
}
Проводка кода, который вызывает 'scramble', поможет. – chux
@chux, я отредактировал и добавил весь код – Quaker
Ваш первый вызов 'memcpy (write + indArr [i] * ElemSize, read, ElemSize)' is 'memcpy (write + 5 * ElemSize, read, ElemSize);' , Похоже, что это вне 'write'. Я думаю, вы хотите 'int indArr [5] = {4,3,2,1,0}'. (Индексирование с нулевым индексом) – chux