使用Segmentation fault
进行编译时,我得到了gcc
。我很确定我找到了调试问题,但是我不知道是什么原因引起的。
首先关于列表和内存分配:
typedef struct Block *List;
struct Block { long start; List next; };
除了我有创建新的List
元素的功能
List
createBlock(long start, List next) {
List l = malloc(sizeof(struct Block));
if(l == NULL){
exit(1);
}
l->start = start;
l->next = next;
return l;
}
当我调用
之类的函数时...
List new = NULL;
new = createBlock(someNumber,NULL);
...
我有一个Segmentation fault
,我不知道为什么
我正在调试createBlock(...)
,一切正常,直到返回为止。
因此,将createBlock的返回值分配给new
时会发生错误,但是为什么呢?
我知道例如在使用字符串时,使用malloc时应使用strcpy
而不是=
。但这只是指针正确吗?说List a = b;
对不应该是一个问题?
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
您正在为在函数的本地范围内定义的变量分配内存。检查Rob对this question的回答。
您可以将指针传递给要修改的struct,而不是返回指针,以便可以访问和修改元素。像这样:
<?php
function connect(){
$connection = mysqli_connect('localhost', 'root', '', 'img');
if (!$connection){
die('Error: Failed to connect DB!!');
}
return $connection;
}
function get_suggestions( $q ){
$connection = connect();
$sql = "SELECT `id`, `q_image`, `q_title`, `q_links` FROM `users` WHERE (`q_title` LIKE '%$q%')";
$result = mysqli_query($connection, $sql);
if ( mysqli_num_rows($result) ){
return mysqli_fetch_all($result, MYSQLI_ASSOC);
}
return false;
}
function debug($arg){
echo '<pre>';
print_r($arg);
echo '</pre>';
exit;
}
?>
并根据需要在上面的范围内移动createBlock(long start, List next, List l) {
if(l == NULL){
return 1;
}
(*l).start = start;
((*l).next) = next;
return 0;
}
。
编辑
我用以下代码测试了该功能,看来还可以:
malloc