Просто для завершения изображения:
Нет необходимости выделять память с помощью malloc. Вы также можете создать буфер в стеке, но вы должны создать его в кадре стека, который живет до тех пор, пока живет потребитель буфера. Это была ошибка OP - когда вызов был закончен, буфер был удален, а вызывающий получил недопустимый указатель.
Итак, что вы можете сделать, это следующее:
void recvmsg(char *buffer, size_t size) {
... do what you want ...
}
void main(void) {
char buffer[1024];
recvmsg(buffer, sizeof(buffer));
}
Если это новый проект, добавленный в решение, и все остальные проекты строят отлично, я предполагаю, что новый проект не был включен в список конфигурации конфигурации решения. В VS Solution Explorer щелкните правой кнопкой мыши узел решения и откройте диалог диспетчера конфигурации и убедитесь, что ваш новый проект проверен для сборки во всех соответствующих конфигурациях (Debug, Release ...), я говорю об этом диалоге:
[/g0]
Я столкнулся с этой же проблемой, за исключением того, что принятое решение не применялось, так как все проекты в моем решении были настроены на сбор по всем соответствующим конфигурациям.
В итоге я очень внимательно посмотрел в моем sln-файле и заметил пагубную ошибку слияния, которая мешала MSBuild строить Project2:
Project("{Guid1}") = "Project1", "Project1\Project1.csproj", "{Guid2}"
Project("{Guid1}") = "Project2", "Project2\Project2.csproj", "{Guid3}"
EndProject
. При слиянии после моего последнего git rebase
я случайно отрубил EndProject
. Добавив его в исправленную проблему, вот так:
Project("{Guid1}") = "Project1", "Project1\Project1.csproj", "{Guid2}"
EndProject
Project("{Guid1}") = "Project2", "Project2\Project2.csproj", "{Guid3}"
EndProject
(я использовал Visual Studio 2015)