gpt4 book ai didi

c++ - 我的 dll 中的内存分配大小上限为 20MB

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:37 24 4
gpt4 key购买 nike

我在创建自己的 DLL(用于学术......)时遇到了问题。

在DLL工程头文件中(编译选项为“C”),我声明了三个要导出的函数

// in dll1 header

#pragma once

#ifdef MYDLL
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif


MYDLL_API int Mmalloc(int**, int);
MYDLL_API int Mfree(int**);
MYDLL_API int Arrsum(int*, int);

它们只是简单的函数。

在 DLL.C 中

 //in dll.c 

#include "dll1.h"
#include <stdlib.h>

int Mmalloc(int** mem, int n) // just memory Allocation
{
*mem = (int*)malloc(sizeof(n)*sizeof(int));
if (*mem) return 1; // if succeed return 1
return 0; // or return zero
};

int Mfree(int** mem) // just memory Free
{
free(*mem);
return 1;
}

int Arrsum(int* arr, int n) // just some operate
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += arr[i];
}
return sum;
}

使用“预处理定义”->“MYDLL”和“运行时库”->“/MD”我 build 它。

然后我创建了另一个项目(编译选项“default (c++)”)添加来自 DLL header 的添加 header 添加外部“C”

#pragma once

#ifdef MYDLL
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif


extern "C"
{
MYDLL_API int Mmalloc(int**, int);
MYDLL_API int Mfree(int**);
MYDLL_API int Arrsum(int*, int);
}

我还制作了main.cpp

#include <stdio.h>
#include <stdlib.h>
#include "dll1.h"

#define SZ 1000

int main()
{
int* arr=0;
int cnt = 0;
while (1)
{
int ret = Mmalloc(&arr, SZ);
printf(ret ? "YES\n" : "NO\n");

for (int i = 1; i <= SZ; i++)
{
arr[i - 1] = i;
printf("%d\n", arr[i - 1]);
}

printf("%d\n", Arrsum(arr, SZ));

printf("cnt : %d\n", ++cnt);
Mfree(&arr);
}
};

然后我将 *.dll、*.lib 文件放在正确的文件夹中。这对我来说似乎只是暂时的,但我发现了巨大的错误。

我在 main.cpp 中使用了 while(1) 语法。所以我的程序应该尽可能地工作,但它会在某些时候停止。

我无法弄清楚什么是真正的问题。

我在 .dll 项目和 main.cpp 项目中更改了堆保留大小

但是我的主程序总是停止。

在 Debug模式下,它停止 .dll, break point trigger

或更大的尺寸(SZ 10000~100000)我有一个访问冲突 access violation

请帮助我..我什至无法想象真正的问题是什么。

dll 中是否有语法错误? (函数中的内存分配?)或者编译器问题? , window ?或者什么?...

最佳答案

Mmalloc 正在分配 4 或 8 个整数(取决于您系统上 sizeof(n) 的值),而不是 n 整数。然后,您的程序会通过缓冲区溢出表现出未定义的行为。

关于c++ - 我的 dll 中的内存分配大小上限为 20MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com