Es ist nicht in Ordnung. Ihr Code stellt nicht sicher, dass m_A
auf einen Speicherort zeigt, der mindestens 10 * sizeof(int)
von reAlloc
ist, so dass sich die Bereiche möglicherweise überlappen. Das bedeutet, dass Ihr Code undefined Verhalten verursacht.
Auch wenn Sie versucht haben, es mit memmove()
zu beheben, sind Sie immer noch in der Grauzone, weil Sie nicht wissen, was bei *(m_A + 9)
ist.
Könnten Ihre Daten sein, dann würde es funktionieren (mit memmove()
, weil es immer noch reAlloc
Daten sein könnte). Könnten nicht Ihre Daten sein, in diesem Fall erhalten Sie einige SIGSEGV.
memcpy()
und memmove()
sind Low-Level-Speichermanipulationsfunktionen, der Compiler erwartet, dass Sie wissen, was Sie tun, und keine Warnungen ausgibt.
Undefiniertes Verhalten. Alles kann passieren. – gnasher729