Почему после выделения памяти и lstrcatA() вылетает программа
Я использую код
#include <windows.h>
#include <iostream>
void create(char* ptr, int size)
{
ptr = (char*)malloc(sizeof(char) * size);
memset(ptr, 0, sizeof(char) * size);
}
int main()
{
char* ptr = nullptr;
create(ptr, 2000);
char str[] = "TEXT_TEXT_TEXT_123";
lstrcatA(ptr, str);
}
Но при выделении памяти не через функцию всё в порядке
#include <windows.h>
#include <iostream>
void create(char* ptr, int size)
{
ptr = (char*)malloc(sizeof(char) * size);
memset(ptr, 0, sizeof(char) * size);
}
int main()
{
char* ptr = nullptr;
ptr = (char*)malloc(sizeof(char) * 2000);
memset(ptr, 0, sizeof(char) * 2000);
char str[] = "TEXT_TEXT_TEXT_123";
lstrcatA(ptr, str);
}
то есть когда выделаю память не через функцию то всё в порядке. Скажите пожалуйста в чем тут разница если я выделаю память через функцию по одинаковой схеме.
Ответы (1 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Потому, что вы внутри функции инициализируете указатель, но не возвращаете его в управляющую программу.
Варианты решения:
Вернуть его как результат функции
char * create(int size) { char * ptr = (char*)malloc(sizeof(char) * size); memset(ptr, 0, sizeof(char) * size); return ptr; } char* ptr = create(2000);Передать в функцию двойной указатель
void create(char ** ptr, int size) { *ptr = (char*)malloc(sizeof(char) * size); memset(*ptr, 0, sizeof(char) * size); } char* ptr = nullptr; create(&ptr, 2000);Передать в функцию ссылку на указатель
void create(char * &ptr, int size) { ptr = (char*)malloc(sizeof(char) * size); memset(ptr, 0, sizeof(char) * size); } char* ptr = nullptr; create(ptr, 2000);
