diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-27 10:43:05 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-27 10:43:05 +0000 |
| commit | d97c1c14b7f62fffc1ce54d4ff3354a5ee21743f (patch) | |
| tree | 1adf0e6be133132685ba81a251f94a6e3dad379a | |
| parent | 270eea5e23e3aeaa93aa0b483cba76cfee1f0df9 (diff) | |
Fix segfault caused in 'dfs.zc'
| -rw-r--r-- | docs/std/vec.md | 1 | ||||
| -rw-r--r-- | examples/algorithms/dfs.zc | 4 | ||||
| -rw-r--r-- | std/vec.zc | 8 |
3 files changed, 11 insertions, 2 deletions
diff --git a/docs/std/vec.md b/docs/std/vec.md index 7bc7c05..525e179 100644 --- a/docs/std/vec.md +++ b/docs/std/vec.md @@ -63,6 +63,7 @@ struct Vec<T> { | Method | Signature | Description | | :--- | :--- | :--- | | **get** | `get(self, idx: usize) -> T` | Returns a copy of the element at `idx`. Panics if out of bounds. | +| **get_ref** | `get_ref(self, idx: usize) -> T*` | Returns a pointer to the element at `idx`. Panics if out of bounds. Useful for avoiding copies. | | **set** | `set(self, idx: usize, item: T)` | Overwrites the element at `idx`. Panics if out of bounds. | | **first** | `first(self) -> T` | Returns a copy of the first element. Panics if empty. | | **last** | `last(self) -> T` | Returns a copy of the last element. Panics if empty. | diff --git a/examples/algorithms/dfs.zc b/examples/algorithms/dfs.zc index 2d4670c..e51acfa 100644 --- a/examples/algorithms/dfs.zc +++ b/examples/algorithms/dfs.zc @@ -32,7 +32,7 @@ impl Graph { visited[vertex] = true; order.push(vertex); - let neighbors = self.adj_list.data[vertex]; + let neighbors = self.adj_list.get_ref(vertex); let neighbor_count = (int)neighbors.len; for i in 0..neighbor_count { let neighbor = neighbors.data[i]; @@ -83,7 +83,7 @@ impl Graph { visited.data[vertex] = true; order.push(vertex); - let neighbors = self.adj_list.data[vertex]; + let neighbors = self.adj_list.get_ref(vertex); let i = (int)neighbors.len - 1; while i >= 0 { let neighbor = neighbors.data[i]; @@ -190,6 +190,14 @@ impl Vec<T> { return self.data[idx]; } + fn get_ref(self, idx: usize) -> T* { + if (idx >= self.len) { + !"Panic: Index out of bounds"; + exit(1); + } + return &self.data[idx]; + } + fn last(self) -> T { if (self.len == 0) { !"Panic: last called on empty Vec"; |
