-1

私はこの関数を書く一般的な関数を練習しようとします:

void *scramble(void *arr, int ElemSize, int n, int *indArr); しかし、デバッガーでプログラムを実行すると、F11 (ステップ イン) を使用してプロトタイプ行でクラッシュし、次のように表示されます。

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;
}
4

2 に答える 2