У меня есть следующий код:
addstruct.h
:
#ifndef ADDSTRUCT_H
#define ADDSTRUCT_H
typedef struct {
double* x;
double* y;
} StructC;
void addstruct(double *a, double *b, const StructC *structc, int len);
#endif
addstruct.c
:
#include "addstruct.h"
void addstruct(double *a, double *b, StructC *structc, int len)
{
for (int i=0; i<len; i++)
{
structc->x[i]=a[i]+b[i];
structc->y[i]=-1*(a[i]+b[i]);
}
}
calladdstruct.m
:
function S = calladdstruct(A,B) %#codegen
if coder.target('MATLAB')
else
coder.updateBuildInfo('addSourceFiles','addstruct.c');
L=1000;
Sx=zeros(1,L); Sy=zeros(1,L);
StructC=struct('x',{Sx}, 'y',{Sy});
coder.cstructname(StructC, 'StructC', 'extern', 'HeaderFile', 'addstruct.h');
coder.ceval('addstruct', coder.rref(A), coder.rref(B), coder.ref(StructC), int32(numel(Sx)));
S=sum(StructC.x);
sprintf('sumx: %s', char( num2ascii(S,0) ))
S=sum(StructC.y);
sprintf('sumy: %s', char( num2ascii(S,0) ))
end
end
и main.c
в Visual Studio:
#include "calladdstruct.h"
#include "calladdstruct_initialize.h"
#include "calladdstruct_terminate.h"
#include <stdio.h>
int main()
{
double S;
double xarr[3]={1,2,3};
double yarr[3]={1,2,3};
calladdstruct_initialize();
S = calladdstruct(xarr, yarr);
printf("%f\n", S);
calladdstruct_terminate();
getchar();
return 0;
}
Когда я запускаю это в Visual Studio, я получаю сообщение об ошибке
Exception Thrown at (calladdstruct.dll) in calladdstruct.exe: Access violation writing location
Почему это так?