gpt4 book ai didi

c - 使用 malloc(sizeof()) 从 *void 到 *int [-fpermissive] 的无效转换

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

我正在编写一个计算两个数字的最大公分母的程序,但我遇到了 malloc 函数和指针的问题。其实很清楚栈和堆段在内存中是如何工作的,为什么。但是我还无法理解在程序中声明指针和使用 malloc 是否有效,是否必要。这是代码:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

int *calcolaDivisori(int);

int main(int argc, char** argv) {

int foundCounter = 0;
int i,j,s1,s2;
int n1,n2;
int mcd = 1,mcm;
int *pn1,*pn2;
int d1[100],d2[100];

// INPUT dei due interi

printf("Inserisci il primo numero :");
scanf(" %d", &n1);
printf("\nInserisci il secondo numero :");
scanf(" %d", &n2);

// calcolo divisori del primo e del secondo numero e li assegno ai relativi array

pn1 = calcolaDivisori(n1);
if (!pn1) return 1;
pn2 = calcolaDivisori(n2);
if (!pn2) return 1;

for (i=0;i<n1;i++) {
d1[i] = pn1[i];
}

for (i=0;i<n2;i++) {
d2[i] = pn2[i];
}

free(pn1);
free(pn2);

// confronto i divisori e calcolo il MCD

s1 = sizeof(d1) / sizeof(int);
s2 = sizeof(d2) / sizeof(int);

for(i=0; i<s1; i++) {
for (j=foundCounter; j<s2;j++) {
if (d1[i] == d2[j]) {
mcd*= d1[1];
foundCounter = j+1;
break;
}
}
}

printf("\n\nIl minimo comune divisore e' : %d", mcd);

return 0;
}

int *calcolaDivisori(int num) {
int i;
int *a = malloc(num * sizeof(int));
if (!a) return NULL;
for (i=2;i<num;i++) {
if (num%i == 0) {
num/=i;
a[i-2]=i;
}
}

return a;
}

运行命令时标题中出现错误:

int *a = malloc(sizeof(int));

最佳答案

你需要转换:

int *a = (int*)malloc(num * sizeof(int));

因为 void* 没有隐式转换至 type *在 C++ 中。

请注意,此转换在 C 中不是必需的,可能是 dangerous在 C 中这样做。

除了 #include <iostream> ,您的代码中没有任何内容是 C++。所以删除它并用 C 编译器编译它,你就不需要这个转换了。

关于c - 使用 malloc(sizeof()) 从 *void 到 *int [-fpermissive] 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34286287/

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