我已经编写了下面的代码但是当我运行它时会带来分段错误。它虽然编译正确。我的错误在哪里?
at System.Data.Entity.Core.Objects.ObjectContext.get_Connection()
at System.Data.Entity.Core.Objects.Internal.ObjectQueryState.get_DefaultStreamingBehavior()
at System.Data.Entity.Core.Objects.Internal.ObjectQueryState.get_EffectiveStreamingBehavior()
at System.Data.Entity.Core.Objects.EntitySqlQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery.ToTraceString()
at System.Data.Entity.Internal.Linq.InternalSet`1.ToString()
at System.Data.Entity.Infrastructure.DbQuery`1.ToString()
at System.IO.TextWriter.Write(Object value)
at System.IO.TextWriter.SyncTextWriter.Write(Object value)
at System.Console.Write(Object value)
at VideoTrainingSystem.Controllers.AdminController.Index() in C:\Users\lg701\Documents\Visual Studio 2015\Projects\VTS2\VTS\Controllers\AdminController.cs:line 18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using VTS.Models;
namespace VTS.Controllers
{
public class AdminController : Controller
{
// GET: Admin
public ActionResult Index()
{
try
{
var test = GetUsers();
}
catch (Exception ex)
{
Console.Write(ex);
}
return View();
}
public IQueryable<User> GetUsers()
{
IQueryable<User> users;
using (UserContext userContext = new UserContext())
{
users = userContext.Users;
}
if (users.Any() == false)
{
return null;
}
else
{
return users;
}
}
}
欢迎任何提示。
谢谢
答案 0 :(得分:2)
你有几个问题:
1)您将NULL传递给pthread_create()
,这可能是segfault的原因。
2)你不要等待线程完成(当main
线程退出整个进程时)。
3)您将地址相同的变量i
传递给所有线程。这是数据竞赛。
4)您正从线程函数返回局部变量buf
的地址。
您可以修改它:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
static int N = 5;
static void* run(void *arg) {
int *i = (int *) arg;
char *buf = malloc(16);
snprintf(buf, 16, "thread %d", *i);
return buf;
}
int main(int argc, char *argv[]) {
int i;
void *ret;
int arr[N];
pthread_t pt[N];
for (i = 0; i < N; i++) {
arr[i] = i;
pthread_create(&pt[i], NULL, run, &arr[i]);
}
for (i = 0; i < N; i++) {
pthread_join(pt[i], &ret);
printf("Thread %d returned: %s\n", i, (char*)ret);
free(ret);
}
return EXIT_SUCCESS;
}
请注意,您不需要使用pthread_join()
来电。您还可以从主线程中调用pthread_exit()
,以便只有主线程退出并继续其他线程。