Malloc Speicher reservieren problem



  • Hallo,
    ich nutze Visualstudio 2012
    und habe derzeit das Problem, dass der Compiler über malloc meckert:

    #include <stdio.h>
    #include <iostream>
    #pragma warning(disable: 4996)
    using namespace std;
    
    int main(){
    
    	int zeile=0, spalte=0;
    
    	printf("Zeile ");
    	scanf("%i",&zeile);
    
    	printf("Spalte ");
    	scanf("%i",&spalte);
    
    	int *matrix;
    	matrix = malloc(zeile * sizeof(int));
    
    system("PAUSE");
    }
    

    Kringel unter = Zeichen mit Fehlerangabe:
    Fehler 1 error C2440: '=': 'void *' kann nicht in 'int *' konvertiert werden

    Was mache ich falsch?
    Habe auch ein Beispiel Galileo openbook C++ verwendet, ohne Erfolg.



  • Da fehlt der nötige Cast. Aber in C++ verwendet man sowieso new und nicht malloc()...



  • Programm ist in C.
    Die Header sind vom alten c++ Programm, die keine Auswirkung auf meinem Programm sein sollten.



  • Du verwechselst C++ mit C.

    Zeile 2,3 und 4 sind C++. Der Rest ist C.

    In C ist ein void -Zeiger ( void* ) in jeden anderen Zeiger konvertierbar.
    In C++ muss man dafür extra einen Cast angeben.

    Lösche Zeile 2 bis 4, füge eine neue Zeile mit

    #include <stdlib.h>
    

    (für malloc) ein und stelle den Compiler auf C um.
    Evtl reicht es dafür aus, den Code mit der Endung .c abzuspeichern und ins Projekt zu übernehmen.



  • dslpro schrieb:

    Programm ist in C.
    Die Header sind vom alten c++ Programm, die keine Auswirkung auf meinem Programm sein sollten.

    Das Programm ist weder C noch C++. Wenn du ein C Programm haben willst, dann schreib ein C Programm und kompilier es mit einem C Compiler. Wenn du ein C++ Programm haben willst, dann schreib ein C++ Programm und kompilier es mit einem C++ Compiler. So geht's jedenfalls nicht, wie du ja bereits gemerkt hast... 😉


  • Mod

    MSVC zeigt das übrigens selbst dann als Fehler an, wenn du C programmierst. Da die IDE auf C++ ausgelegt ist. Es sollte aber ohne den Cast funktionieren, wenn du es (mit dem C-Compiler) übersetzt.

    Habe auch ein Beispiel Galileo openbook C++ verwendet, ohne Erfolg.

    👎 👎
    Einmal 👎 für Benutzung von Galileo openbook, das zweite 👎 für Benutzung eines C++-Buchs, wenn man C machen möchte. Die Sprachen sind zu verschieden, um da Lehren zu übertragen. Und das dieses spezielle Buch anscheinend nichts taugt, sieht man da dran, dass es ja anscheinend C/C++-Mischmasch lehrt, obwohl C++ drauf steht.

    dot schrieb:

    Da fehlt der nötige Cast. Aber in C++ verwendet man sowieso new vector und nicht malloc()...

    FTFY


Anmelden zum Antworten