【发布时间】:2013-09-17 16:31:03
【问题描述】:
我尝试练习编写这个函数的通用函数:
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,我已经编辑并添加了整个代码
-
您第一次致电
memcpy(write + indArr[i]*ElemSize, read, ElemSize)是memcpy(write + 5*ElemSize, read, ElemSize);。这似乎在write之外。我想你想要int indArr[5]={4,3,2,1,0}。 (基于零的索引) -
你用的是什么调试器?通常,当程序以返回码 0 结束时,它已成功完成。
-
@chux,没错,我已经修复了这个问题,但程序仍然无法在调试器下运行。 \
标签: c crash memcpy function-prototypes